SQL Injection

Status
Niet open voor verdere reacties.

royduin

Gebruiker
Lid geworden
6 mei 2006
Berichten
583
Wat is de beste methode tegen sql injection?

Momenteel gebruik ik dit:
PHP:
<?php
	foreach($_POST as $name => $value){
		$_POST[$name] = mysql_real_escape_string($value);
	}
	foreach($_GET as $name => $value){
		$_GET[$name] = mysql_real_escape_string($value);
	}
	foreach($_SESSION as $name => $value){
		$_SESSION[$name] = mysql_real_escape_string($value);
	}
?>

En om het er weer uit te halen maak ik enkel gebruik van stripslashes.

Is dit veilig genoeg? Eventuele aan of opmerkingen?

Alvast bedankt!
 
stripslashes zijn niet bepaald veilig ik zou daar als ik jou was ook escape string van maken
 
I.p.v. stripslashes ook escape string (ik neem aan dat je mysql_real_escape_string bedoelt) gebruiken?
Het gaat hier om het uit de database halen van gegevens. Met mysql_real_escape_string zet je hier en daar een backslash neer. Wanneer je iets wilt weergeven is de bedoeling dat deze backslashes er weer uit gehaald worden. Dan is stripslashes toch de oplossing?
 
Je gebruikt _nooit_ stripslashes en _alleen_ mysql_real_escape_string in je query.

PHP:
$sQuery = "INSERT INTO x (a) VALUES ('".mysql_real_escape_string($b)."')";

De slashes komen namelijk niet in je database.
 
Het stukje code in mijn eerste bericht is dus goed genoeg beveiligd?
Of je alleen in query's of bij elke post, get of session mysql_real_escape_string gebruikt maakt dan toch ook niet uit? Op deze wijze hoef je niet in elke query mysql_real_escape_string neer te zetten.

Wanneer ik nu in een formulier invul: test'
Staat er in de database: test\'
Wanneer ik dit opvraag en weergeef: test\'

Bij: test"
database: test\"
weergeef: test\

Als ik die slash bij het weergeven weg wil gebruik ik dan toch stripslashes? Dan zijn ze wel weg...
Waarom wordt " niet weergeven in het 2e voorbeeld?
 
ik gebruik

PHP:
$url = substr($_SERVER['REQUEST_URI'], 1);
if(eregi(";", $url) or eregi("'", $url) or eregi("<", $url) or eregi(">", $url) or eregi(")", $url) or eregi("query", $url) or eregi("mysql", $url) or eregi('"', $url) or eregi('config', $url) or eregi('ingelogd', $url) or eregi("query", $url)){ 
print <<<ENDHTML
<html> 
<head> 
<title>[[(*( GETTO GANG )*)]]</title> 
<link rel="stylesheet" type="text/css" href="css-v2.css"> 
</head> 
<body style="margin: 0px;"> 
  <table width="100%">
    <tr><td class="subTitle"><b>Mysql</b></td></tr> 
    <tr><td class="mainTxt">Injecties zijn verboden..<br />
<br>
Heeft u hier niks mee te maken. Loguit daarna in dan kan je weer verder spelen.
    </td></tr> 
  </table>
<br />
<br />
ENDHTML;
exit;
}

en

PHP:
$locatie = $_SERVER['REQUEST_URI'];
$array = Array();
$array[] = "mysql";
$array[] = "query";
$array[] = ")";
$array[] = ";";
$array[] = "}";
$array[] = "INSERT";
$array[] = "%40";
$array[] = "DROPTABLE";
$array[] = "TRUNCATE";
foreach($array As $foutbezig) {
if(eregi($foutbezig,$locatie)) {
echo "GEEN INJECTIE DOEN!<br>";
exit();
}
}

misschien heb je er iets aan
 
Dat is allemaal vrij nutteloos, met alle respect.. mysql_real_escape_string is genoeg voor wat betreft SQL-injection. Verder zijn er nog veel andere security-issues waar je op moet letten, maar deze manier is wat curieus.
 
In dezelfde richting een andere vraag: Ik heb is wat rond zitten zoeken naar een programma die de beveiliging van een website controleert. Ik kwam bij Acunetix Web Vulnerability Scanner uit. Testversie eens geprobeerd en de website kwam er gelukkig goed uit.

Is er een soortgelijk gratis programma die alles test? Dit op dezelfde wijze als de hierboven genoemde. Heb meerdere scanners gevonden maar deze dienen uitgevoerd te worden op de webserver.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan