Hét vraag- en antwoordplatform van Nederland
Geef jouw antwoord

Het is niet mogelijk om je eigen vraag te beantwoorden Je mag slechts 1 keer antwoord geven op een vraag Je hebt vandaag al antwoorden gegeven. Morgen mag je opnieuw maximaal antwoorden geven.

/
Geef Antwoord
+
Selected image

Antwoorden (3)

Alle post en gets escapen.
(Lees meer...)
Verwijderde gebruiker
12 jaar geleden
Dat is erg pittig om 'zo maar even' te doen. Er is erg veel literatuur over verschenen, en mijn favorite cheat sheet is van OWASP.


Eerste lijn te verdediging::
Option #1: Use of Prepared Statements (Parameterized Queries)
Option #2: Use of Stored Procedures
Option #3: Escaping all User Supplied Input

Tweede lijn:
Also Enforce: Least Privilege
Also Perform: White List Input Validation

Zelf eis ik altijd een combinatie van:
Optie 2 doe in de database. Je slaat daar alle SQL opdrachten op, die je [met parameters uit je] website aanroept. Daardoor wordt er geen SQL vanaf ej website naar je DB gestuurd en is het dus simpel om te voorkomen dat iemand SQL kan injecteren.

Optie 3 zorgt er voor dat er geen 'vreemde' input van je website naar de DB gestuurd wordt en als dat toch voorkomt, dat er een sanity check plaats vindt voordat het wordt uitgevoerd.

De tweede lijst zijn extra goede beheer maatregelen zoals het laten werken van jouw front & backend software met de absoluut minimale rechten die het nodig heeft om te werken maar helemaal niets extra's kan doen. Plus het alleen maar accepteren van parameters die jij van te voren hebt goed gekeurd.

Check ajb de link die hier onderstaat, het zal je veel ellende schelen als je de concepten begrijpt & implementeert.
(Lees meer...)
Verwijderde gebruiker
12 jaar geleden
Wiki:

Door middel van het geven van de minimaal noodzakelijke rechten zal het ongewenst aanpassen van de gegevens vermeden worden.

De injectie met SQL-code kan eenvoudig tegengegaan worden door het juist verwerken van informatie die door een gebruiker wordt aangeleverd. In de programmeertaal PHP kan dat bijvoorbeeld via mysql_real_escape_string(). Deze functie vangt (my)SQL specifieke karakters af door er een backslash (\) voor te plaatsen. Hierdoor weet het systeem dat enkel het letterteken bedoeld wordt, en niet meer de scheidende functie van het afbakenen van gegevens. Een stukje voorbeeld-programmeertaal in PHP kan er als volgt uitzien:
$result = mysql_query("SELECT * FROM persoon WHERE achternaam = '".mysql_real_escape_string($_POST['achternaam'])."'");
?>

Een andere methode om injectie tegen te gaan is door middel van een voorgedefinieerd statement. Hierbij wordt in het aanroepende programma het statement opgebouwd met een variabele. De inhoud van de variabele wordt dan gekoppeld aan de gebruikersinvoer.

Bijvoorbeeld (in de taal Java):

In plaats van
Connection con = (maak verbinding met de database)
Statement stmt = con.createStatement();
ResultSet rset = stmt.executeQuery("SELECT * FROM persoon WHERE achternaam = '" + invoer + "';");

is het beter om het volgende te gebruiken
Connection con = (maak verbinding met de database)
PreparedStatement pstmt = con.prepareStatement("SELECT * FROM persoon WHERE achternaam = ?");
pstmt.setString(1, invoer);
ResultSet rset = pstmt.executeQuery();
(Lees meer...)
Verwijderde gebruiker
12 jaar geleden
Deel jouw antwoord

Het is niet mogelijk om je eigen vraag te beantwoorden Je mag slechts 1 keer antwoord geven op een vraag Je hebt vandaag al antwoorden gegeven. Morgen mag je opnieuw maximaal antwoorden geven.

/
Geef Antwoord
+
Selected image