Vraag
Stel je vraag:
Geef antwoord
Doe mee en antwoord

hoe beveilig ik mijn website tegen sql injecties?

3 maanden geleden | gesloten | gesteld via mobiel |
bonkel007
bonkel007 (59)

3 Antwoorden

Sorteren op: Waardering· Datum

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:
<?php
$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();

3 maanden geleden
0 0  |  0 reacties
HansBrinker

Alle post en gets escapen.

3 maanden geleden | beantwoord via iPhone
0 0  |  0 reacties
mokum
mokum (2067)

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.

3 maanden geleden
0 0  |  0 reacties