Door
Ariën
op 12-10-2017 16:41
gewijzigd op 12-10-2017 16:42
2.728 views
Ik vroeg me af op er ook procedures bestaan die mogelijke SQL-injections kunnen loggen?
Natuurlijk is het de bedoeling dat alle input netjes met 'prepared statements' of $conn->real_escape_string() ge-escaped en dus beveiligd wordt, maar zijn er er ook mogelijkheden om verdachte queries te kunnen herkennen, zodat je wat extra informatie in een textfile kan opslaan?
In de OWASP SQL Injection Prevention Cheat Sheet zijn "White List Input Validation" en "Escaping All User-Supplied Input" nog steeds twee belangrijke verdedigingslinies. Dat de wapenuitrusting van die linies in de loop der jaren verandert, maakt de verdedigingsstrategieën zelf niet ineens nutteloos.
Meer on topic: je moet alles loggen. De kwaadaardigste SQL-injectie is immers degene die is geslaagd omdat je die onopgemerkt liet passeren, niet de query die mislukte of de query waarvoor de input werd afgekeurd.
Daar stip je ook iets aan. Magic Quotes en addslashes() waren immers nooit bedoeld noch geschikt voor escaping van DATA binnen SQL. Dit was, en is (helaas nog steeds), een ingeburgerd verkeerd gebruik.
Dit soort (gevestigde) misvattingen de wereld uit helpen is eigenlijk het moeilijkste wat er is. Hier moet je namelijk een berg tekst tegenaan gooien om fundamentele zaken uit te leggen en te verduidelijken, en de enige reactie die je dan vaak krijgt is "whatevs".
En ja, log alles, of in ieder geval fouten. Probeer ook niet invoer die niet voldoet te repareren met typecasts of wat dan ook. Laat dingen gewoon fout gaan die fout zijn. Tis heel simpel: invoer voldoet (YES) of voldoet niet (NO).