2017-06-16 1 views
1

Wie schütze ich mich vor SQL-Injection, wenn ich die Website in PHP geschrieben habe? Kann ich vorbereitete Aussagen verwenden? Oder gibt es andere Möglichkeiten?Schutz vor SQL-Injection - PHP Prozedur

Beispiel:

$query ="INSERT INTO users (name,username,password,email,gender) VALUES ('$name','$username','$password','$email','$gender')"; 
$result = mysqli_query($connect,$query) or die ("Error : ". mysqli_error($connect)); 
+0

PDO-Abfragen verwenden – Marcin

+0

Vorbereitete Anweisungen verwenden. Ja, es ist möglich, sie mit der prozeduralen Schnittstelle zu verwenden. Siehe [die Beispiele in den Dokumenten] (http://php.net/manual/en/mysqli.prepare.php#refsect1-mysqli.prepare-examples). Es gibt ein OO-Beispiel und ein Verfahrensbeispiel. –

+0

Sie haben eine korrekte Antwort erhalten. Meiner Meinung nach ist PDO/mysql einfacher zu benutzen als mysqli. In jedem Fall gehen die Verwendungsparameter und die Bedenken bezüglich Entweichen oder Sql-Injektion im Wesentlichen weg. – gview

Antwort

1

Ja, können Sie vorbereitete Anweisungen mit gebundenen Parametern in prozeduralen Code schreiben mysqli verwenden. Hier ist eine Lösung basierend auf Ihrem Beispiel.

$query =" 
    INSERT INTO users (name, username, password, email, gender) 
    VALUES (?, ?, ?, ?, ?)"; 
if (($stmt = mysqli_prepare($connect, $sql)) === false) { 
    die("Error : " . mysqli_error($connect)); 
} 
if (mysqli_stmt_bind_param($stmt, "ssss", $name, $username, $password, $email, $gender) === false) { 
    die("Error : " . mysqli_stmt_error($stmt)); 
} 
if (mysqli_stmt_execute($stmt) === false) { 
    die("Error : " . mysqli_stmt_error($stmt)); 
} 
$result = mysqli_stmt_get_result($stmt); 
if (mysqli_errno()) { 
    die("Error : " . mysqli_stmt_error($stmt)); 
} 
... fetch from $result ... 
Verwandte Themen