Meilen Pfefferle
Diese Frage hat hier bereits Antworten :
Abgeschlossen vor 10 Jahren .
Mögliches Duplikat:
Wie kann ich SQL-Injection in PHP verhindern?
Dies ist das Beispiel auf w3schools.org:
HTML-Formular:
<html>
<body>
<form action="insert.php" method="post">
Firstname: <input type="text" name="firstname" />
Lastname: <input type="text" name="lastname" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>
</body>
</html>
Datei insert.php:
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
$sql="INSERT INTO Persons (FirstName, LastName, Age)
VALUES
('$_POST[firstname]','$_POST[lastname]','$_POST[age]')";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "1 record added";
mysql_close($con)
?>
Ich habe hier andere Fragen durchgelesen, aber ich konnte keine direkte Antwort finden, da die meisten viel komplizierter waren.
Ich sah zu Wie kann ich SQL-Injection in PHP verhindern? aber ich bin etwas verwirrt, wie ich das ändern soll:
$preparedStatement = $db->prepare('INSERT INTO table (column) VALUES (:column)');
$preparedStatement->execute(array(':column' => $unsafeValue));
Angenommen, ich habe das obige HTML-Formular verwendet und wollte die Daten aus dem Feld „Vorname“ in die Datenbank einfügen, sollte es dann so aussehen? Oder soll ich modifizieren column
?:
$preparedStatement = $db->prepare('INSERT INTO table (column) VALUES (:column)');
$preparedStatement->execute(array(':column' => $firstname));
shaunsantacruz
Das von Ihnen bereitgestellte Beispiel fügt die Post-Variablen in die Datenbank ein, ohne sie zuerst auf bösartige Benutzereingaben zu analysieren. Verwenden Sie Typumwandlung, Escape-/Filterfunktionen, vorbereitete Anweisungen usw., bevor Sie sie verwenden, um mit Ihrer DB zu interagieren.
Eine allgemeine Regel lautet, Benutzereingaben niemals zu vertrauen. JE!
Check out: Der beste Weg, um die SQL-Injection in PHP zu stoppen
Als Antwort auf Ihre Frage, hier ist, wie Sie das gesamte Formular mit PDO-vorbereiteten Anweisungen handhaben würden.
$stmt = $db->prepare('INSERT INTO Persons (FirstName, LastName, Age) VALUES (:first_name, :last_name, :age)');
$stmt->execute(array(':first_name' => $first_name,':last_name' => $last_name, ':age' => $age));
Wenn Sie nur eine Spalte wie gewünscht in den Datensatz einfügen möchten, lautet die Syntax:
$stmt = $db->prepare('INSERT INTO Persons (FirstName) VALUES (:first_name)');
$stmt->execute(':first_name', $first_name);
Daniel A. Weiß
NEIN.
Das ist HÖCHST anfällig für SQL-Injection-Angriffe.
Anstatt zu verwenden mysql_real_escape_string
schlage ich vor, vorbereitete Anweisungen zu verwenden.
jahuda
$magic_quotes_active = get_magic_quotes_gpc();
$real_escape_string_exists = function_exists('mysql_real_escape_string');
function escape_value($sql) {
if ($real_escape_string_exists) {
if($magic_quotes_active) {
$sql = stripslashes($sql);
}
$sql = mysql_real_escape_string($sql);
} else {
if(!$magic_quotes_active) {
$sql = addslashes($sql);
}
}
return $sql;
}
Dies wird als eine sehr sichere Art betrachtet, Daten in eine Datenbank einzufügen. Verwenden Sie die zurückgegebenen $sql
als Ihre Anfrage!
129874 0 0 cookie-check Ist dies eine sichere Methode zum Einfügen von Formulardaten in eine MySQL-Datenbank? [duplicate] yes
Also, was genau ist dein Problem?
– Bogdacutu
8. März 2012 um 20:20 Uhr
Wie kann ich diese Methode sicher machen?
– Miles Pfefferle
8. März 2012 um 20:24 Uhr