- Alle categorieën
- Computers & Internet
- Elektronica
- Entertainment & Muziek
- Eten & Drinken
- Financiën & Werk
- Huis & Tuin
- Kunst & Cultuur
- Maatschappij
- Persoon & Gezondheid
- Sport, Spel & Recreatie
- Vakantie & Reizen
- Vervoer
- Wetenschap
- GoeieVraag.nl
- Overig
hoe beveilig ik mijn website tegen sql injecties?
3 Antwoorden
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();
Alle post en gets escapen.
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.
Gerelateerde vragen
Stel vragen en deel jouw kennis met anderen. Een unieke kans om snel antwoord op die dringende vraag te krijgen.
- 1. Camera iPad veilig?
1 antwoord - 2. Kan je via een IP adres achterhalen waar iemand woont of wie die persoon is?
2 antwoorden - 3. Mijn site is gehackt, weet iemand wat dit script doet?
1 antwoord
-
09:04 Nyck beantwoordt:
Hoe kan ik te weten komen of ik 's nachts slaapwandel ? -
09:03 Retteketet beantwoordt:
Hebben mensen met veel vet het sneller warm, koud, of verschilt dit niet met… -
09:01 Ajaxjim vraagt:
Hoe verloopt het sloop- en renovatieproces van kozijnen?
-
DamianHelper
28 punten -
mendelson
17 punten -
funkeydogz
17 punten -
freekfluweel
16 punten -
capthavoc
16 punten
mobiel

