of hoe gebruikersgegevens te beschermen tegen SQL-injectie

xkcd

fun facts:

SQL Injection bestaat al sinds websites gegevens in databases opslaan.

het Open Web Application Security Project beoordeelde injectieaanvallen als een van de top 10 bedreigingen waarmee webapplicaties in 2017 worden geconfronteerd.,

SQL injection is nog steeds verantwoordelijk voor veel grote datalekken. In 2016, De Illinois en Arizona State Board of Elections kiezersregistratie databases werden geschonden. Hoewel er geen informatie werd gestolen in Arizona, in Illinois aanvallers hadden toegang tot kiezer gegevens met inbegrip van naam, adres, geboortedatum, geslacht en gedeeltelijke sofinummers, voor ongeveer 80.000 mensen.⁴

dat is angstaanjagend, Wat Is het?

SQL-injectie is een type aanval dat zich richt op de database van een toepassing door het invoegen van onbedoelde code in invoervelden van gebruikers., Door gebruik te maken van SQL — syntaxis kan de aanvaller invoervelden gebruiken om informatie uit die databases vast te leggen-inclusief zaken als wachtwoorden en creditcardnummers. Iemand kan zelfs de controle over uw database of verwijder alle informatie die het bevat.

Hoe werkt het?

SQL-injectie werkt door informatie te gebruiken die in een veld is ingevoegd om de overeenkomstige SQL-instructie te manipuleren om een onbedoelde actie uit te voeren.,

Hier is een basisvoorbeeld:

SELECT * FROM customers WHERE name = " + user_name + ";

in dit voorbeeld laten we zeggen dat de variabele user_name direct wordt aangemaakt vanuit de input van de gebruiker op een website. Die string wordt ingevoegd in het bovenstaande SQL statement en alle velden met betrekking tot die gebruikersnaam worden geretourneerd. Geen probleem.

maar wat gebeurt er als iemand Steve” of 1=1; – typt als zijn gebruikersnaam? dan zou de gegenereerde SQL dit zijn:

SELECT * FROM customers WHERE name = "Steve" OR 1=1;--";

aangezien 1=1 altijd waar is, zou dit alle gegevens in de tabel retourneren. Niet Goed!,

Let’s take one more look at that comic.

xkcd

The son’s name is Robert’); DROP TABLE students; — What would that do exactly?,

wel, we kunnen aannemen dat als kleine Bobby tabellen werden toegevoegd aan de school database van leerlingen, het SQL statement er ongeveer uit zou zien:

INSERT INTO students (name) VALUES ('<Student Name>');

… en als we Bobby invoegen…

INSERT INTO students (name) VALUES ('Robert'); DROP TABLE students;--');

omdat Bobby ‘ s naam De) bevat; het waarde argument wordt gesloten in het midden van zijn naam en de tekst die volgt op DROP TABLE studenten is een nieuwe SQL-verklaring die de hele tabel verwijdert. Tot slot de-aan het einde commentaren uit de resterende SQL, in wezen negeren van de rest van de originele code en ervoor te zorgen dat er geen fout optreedt.,