2017-08-05 2 views
1

Was ist der beste Weg zu überprüfen, ob der Benutzer bösartigen Code in einem Formularfeld eingegeben? Ich habe mir andere Fragen angeschaut, diese überprüfen aber nur, ob was eingegeben wurde und ob es was sie wollten (Telefonnummer im Telefonfeld). Ich suche Schutz vor SQL-Injektionen.Verhindern von SQL-Injektionen in PHP

+0

Reinigen Sie den Eingang, wenn es verarbeitet wird, Streifen Tags, PDO usw. verwenden –

+0

Ihre Frage ist zu breit. Sie müssen das Problem genau bestimmen und berücksichtigen, was Sie versucht haben zu tun. Sie können dies [https://stackoverflow.com/help/how-to-ask] überprüfen, um Hilfe zu erhalten. – SaidbakR

+0

Ich habe gesagt, dass ich etwas brauche, um MySQL-Injektionen zu verhindern. Können Sie darauf hinweisen, wo ich genauer sein kann? –

Antwort

3

Prepared statements sind für die Verhinderung von SQL-Injektion gedacht und sie sind genug, wenn wir über SQL-Injektion sprechen. Aber, es gibt einige andere Angriffe, die Sie auch verhindern sollten. XSS, CSRF und andere.

SQL-Injection:

Prepared Statements im Grunde wie folgt funktionieren:

  1. vorbereiten: Eine SQL-Anweisung Vorlage wird erstellt und an die Datenbank gesendet. Bestimmte Werte sind nicht spezifiziert, sogenannte Parameter (mit "?" Gekennzeichnet). Beispiel: INSERT INTO MyGuests VALUES
  2. Die Datenbank analysiert, kompiliert und führt die Abfrageoptimierung auf der Vorlage SQL-Anweisung, und speichert das Ergebnis, ohne sie
  3. Execute Ausführung (?,?,?): Zu einem späteren Zeitpunkt wird die Die Anwendung bindet die Werte an die Parameter und die Datenbank führt die Anweisung aus. Die Anwendung kann die Aussage so oft ausführen, wie es mit unterschiedlichen Werten will

Probe:

// Prepare the statement. 
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)"); 

// Bind parameters. 
$stmt->bind_param("sss", $firstname, $lastname, $email); 

// Set parameters. 
$firstname = "John"; 
$lastname = "Doe"; 
$email = "[email protected]"; 

// Execute the statement. 
$stmt->execute(); 

// Close the statement. 
$stmt->close(); 

// Close the connection. 
$conn->close(); 

Quelle: w3schools.com

+0

Also würde ich das überall verwenden wollen, akzeptiere ich Benutzereingaben? –

+0

Ja, immer wenn Sie Benutzereingaben in Ihre Datenbank einfügen. – Spectarion

+0

Okay. Sollte ich das auch beim Login benutzen, weil ich etwas gegoogelt habe und ich sah, dass ein User so etwas im Usernamenfeld machen könnte. "John" oder 1 = 1; - ' –

0

Verwendung htmlspecialchars und htmlentities HTML-Sonderzeichen zu entkommen Entitäten HTML, wenn Sie beabsichtigen, eine Benutzereingabezeichenfolge zu speichern oder auszugeben. Dies wird helfen, HTML-Injektion zu vermeiden.

Die Antwort von Spectarion ist eine gute Lösung für die SQL-Injektion.

Verwandte Themen