Basis van informatiebeveiliging
Waarom worden prepared statements met placeholders (geparametriseerde query's) als tegenmaatregel tegen SQL-injectie als fundamenteler beschouwd dan het verwijderen van gevaarlijke tekens uit de invoer?
- AOmdat de invoer wordt versleuteld voordat hij aan de database wordt doorgegeven, zodat aanvallers hem niet kunnen lezen
- BOmdat de browser controleert welke soorten tekens worden ingevoerd, zodat kwaadaardige tekenreeksen de server nooit bereiken
- COmdat eerst de structuur van het SQL-statement wordt vastgelegd en de invoer daarna alleen als waarden wordt doorgegeven, zodat de invoer, welke tekens hij ook bevat, nooit als deel van de opdracht wordt geïnterpreteerd
Antwoord en toelichting tonen
Antwoord: C. Omdat eerst de structuur van het SQL-statement wordt vastgelegd en de invoer daarna alleen als waarden wordt doorgegeven, zodat de invoer, welke tekens hij ook bevat, nooit als deel van de opdracht wordt geïnterpreteerd
Bij een prepared statement wordt eerst een SQL-statement waarin de waarden door symbolen (placeholders) zijn vervangen, zoals „SELECT … WHERE id = ? AND password = ?”, aan de database doorgegeven om de structuur vast te leggen, en daarna wordt de invoer alleen als waarden gekoppeld (binding). De invoer wordt van begin tot eind als gegevens behandeld, dus zelfs als hij aanhalingstekens bevat, wordt hij nooit deel van een opdracht, zoals een opdracht die een voorwaarde toevoegt. Gevaarlijke tekens verwijderen of escapen vereist dat elke gedetailleerde regel voor elk type database en elke tekencodering zonder uitzondering wordt afgehandeld, en één enkele leemte laat de aanval slagen. Controles van de invoer in de browser kunnen worden omzeild als de aanvaller verzoeken rechtstreeks verstuurt zonder een browser te gebruiken; ze dienen het gebruiksgemak en zijn geen beveiligingsmaatregel. Daarnaast blijft de schade klein als het account waarmee met de database wordt verbonden de minimale rechten krijgt.