Heim > Artikel > Backend-Entwicklung > Wie kann man SQL-Injection in PHP verhindern?
SQL-Injection (SQLi) ist ein Injektionsangriff, der bösartige SQL-Anweisungen ausführen kann. Es gibt Angreifern die vollständige Kontrolle über den Datenbankserver hinter einer Webanwendung, indem es beliebigen SQL-Code in Datenbankabfragen einfügt.
Ein Angreifer kann SQL-Injection-Schwachstellen nutzen, um Anwendungssicherheitsmaßnahmen zu umgehen; er kann die Authentifizierung und Autorisierung einer Webseite oder Webanwendung umgehen und den Inhalt der gesamten SQL-Datenbank abrufen ;SQL-Injection kann auch zum Hinzufügen, Ändern und Löschen von Datensätzen in der Datenbank verwendet werden.
Wie kann man SQL-Injection in PHP verhindern?
1. Wann sind Sie am anfälligsten für SQL-Injection-Angriffe?
Wenn eine Anwendung Eingabeinhalte verwendet, um dynamische SQL-Anweisungen zu erstellen Datenbank-SQL-Injection-Angriffe werden auftreten
2. So verhindern Sie SQL-Injection
a Vertrauen Sie niemals Benutzereingaben und überprüfen Sie Benutzereingaben, einfache Anführungszeichen und „_“ können durch reguläre Ausdrücke oder begrenzte Länge konvertiert werden
Veraltet:
//$user = htmlspecialchars(addslashes($user)); //$pwd = htmlspecialchars(addslashes($pwd)); //$yzm = htmlspecialchars(addslashes($yzm));
Sollte verwendet werden:
$user = htmlspecialchars(addslashes($user)); $pwd = htmlspecialchars(addslashes($pwd)); $yzm = htmlspecialchars(addslashes($yzm));
b, Verwenden Sie niemals die dynamische Assemblierung von SQL. Sie können parametrisiertes SQL verwenden oder direkt gespeicherte Prozeduren für die Datenabfrage und den Datenzugriff verwenden.
Nicht empfohlen:
// $sql = "select * from user where user='$user' and pwd ='$pwd'";
sollte verwendet werden:
$sql = "select * from user where user=? and pwd =?";
c, Verwenden Sie niemals eine Datenbankverbindung mit Administratorrechten, verwenden Sie für jede Anwendung eine separate Datenverbindung mit eingeschränkten Berechtigungen
$conn = @new mysqli('localhost','root','','myschool'); if($conn->connect_error){ die('连接数据库失败'); } $conn->set_charset('utf8');
d, Vertrauliche Informationen nicht direkt speichern, sondern verschlüsseln oder HASH-Passwörter und vertrauliche Informationen
e, Die Erkennungsmethode der QL-Injection besteht im Allgemeinen darin, Hilfssoftware oder Website-Plattformerkennung zu verwenden. Software Im Allgemeinen wird das SQL-Injection-Erkennungstool jsky verwendet Die Website-Plattform verfügt über Yisi. Das Website-Plattform-Erkennungstool
3 wird häufig in MySQL-Operationen verwendet Klasse, MYSQL_STMT-Klasse, MYSQLI_RESULT-Klasse, die Vorverarbeitung wird hauptsächlich mit der MYSQL_STMT-Klasse durchgeführt.
Vorverarbeitung ist ein wichtiges Mittel zur Verhinderung von SQL-Injection und von großer Bedeutung für die Verbesserung der Website-Sicherheit. Das Funktionsprinzip von Vorverarbeitungsanweisungen:
(1) Vorverarbeitung: Erstellen eine SQL-Anweisungsvorlage erstellen und an die Datenbank senden. Die reservierten Werte werden mit Parametern markiert.
Beispiel: Werte (?,?,?) in myguests(firstname,lastname,email) einfügen(2) Datenbankanalyse, Kompilierung, Abfrageoptimierung auf SQL-Anweisungsvorlage und storage Das Ergebnis wird nicht ausgegeben.rrree
(3) wird schließlich an den Parameter („?“) übergeben, der die Anweisung ausführen kann die Anweisung mehrmals, wenn der Wert des Parameters unterschiedlich ist Weitere PHP-bezogene Kenntnisse finden Sie auf derPHP-Chinese-Website
!Das obige ist der detaillierte Inhalt vonWie kann man SQL-Injection in PHP verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!