Heim  >  Artikel  >  Backend-Entwicklung  >  PHP implementiert sichere Programmierung: SQL-Injection und -Verteidigung

PHP implementiert sichere Programmierung: SQL-Injection und -Verteidigung

王林
王林Original
2023-06-18 10:37:281178Durchsuche

Sicheres Programmieren mit PHP: SQL-Injection und -Verteidigung

Heutzutage boomt das Internet und Websites und Anwendungen werden immer beliebter. Damit gehen wachsende Sicherheitsbedrohungen einher. Eine der häufigsten Angriffsmethoden ist die SQL-Injection. SQL-Injection-Angriffe verwenden Eingabedaten, um SQL-Befehle zu ändern oder zu manipulieren und dann auf den Inhalt der Back-End-Datenbank zuzugreifen, ihn zu ändern und zu löschen. In diesem Artikel werden die Prinzipien und Abwehrmaßnahmen von SQL-Injection-Angriffen vorgestellt und erläutert, wie sichere Programmierung in PHP implementiert wird.

Das Prinzip des SQL-Injection-Angriffs:

Das Prinzip des SQL-Injection-Angriffs ist sehr einfach: Der Angreifer überschreibt die Originaldaten mit böswilligen Schaddaten und stört und zerstört so den Datenverarbeitungsprozess. Da SQL-Abfragen in der Regel von Programmen auf der Grundlage der von Benutzern eingegebenen Daten erstellt werden, können Angreifer der Eingabe Sonderzeichen hinzufügen, um die Abfrage an die vom Angreifer gewünschten Ergebnisse anzupassen.

Das Folgende ist ein einfacher Beispielcode:

$user = $_POST['user'];
$password = $_POST['password'];

//查询用户是否存在
$sql = "SELECT * FROM users WHERE username='$user' AND password='$password'";
$result = mysqli_query($conn, $sql);

Wenn ein Angreifer den folgenden Code eingibt:

' OR '1'='1

Die konstruierte SQL-Abfrageanweisung wird zu:

SELECT * FROM users WHERE username='' OR '1'='1' AND password=''

Dies führt dazu, dass die Abfrageanweisung immer einen wahren Wert zurückgibt, sodass die Angreifer können unter Umgehung der Authentifizierung auf den Inhalt der Datenbank zugreifen, ihn ändern oder löschen.

Abwehrmaßnahmen:

Es gibt viele Möglichkeiten, sich gegen SQL-Injection-Angriffe zu verteidigen. Hier sind einige häufig verwendete Maßnahmen:

  1. Verwenden Sie vorbereitete Anweisungen:

Vorbereitete Anweisungen sind eine wirksame Möglichkeit, SQL-Injection-Angriffe zu verhindern um Variablen in der Abfrageanweisung zu ersetzen. Diese Platzhalter werden vom Programm automatisch maskiert und die Daten werden überprüft.

Hier ist ein Beispielcode mit vorbereiteten Anweisungen:

$user = $_POST['user'];
$password = $_POST['password'];

//使用预处理语句查询用户是否存在
$stmt = $conn->prepare("SELECT * FROM users WHERE username=? AND password=?");
$stmt->bind_param("ss", $user, $password);
$stmt->execute();
$result = $stmt->get_result();
  1. Benutzereingaben filtern:

Vor dem Lesen und Bearbeiten von Benutzereingabedaten müssen diese gefiltert und validiert werden. Sie können die integrierten PHP-Funktionen verwenden, um Benutzereingaben zu filtern, z. B. htmlspecialchars() oder mysqli_real_escape_string().

Das Folgende ist ein Beispielcode, der die Funktion mysqli_real_escape_string() verwendet, um Benutzereingaben zu filtern:

$user = mysqli_real_escape_string($conn, $_POST['user']);
$password = mysqli_real_escape_string($conn, $_POST['password']);

//查询用户是否存在
$sql = "SELECT * FROM users WHERE username='$user' AND password='$password'";
$result = mysqli_query($conn, $sql);
  1. Benutzereingaben minimieren:

Durch die Reduzierung der Daten, die der Benutzer eingeben muss, kann das Risiko von SQL-Injection-Angriffen verringert werden. Sie können die Standardwerte, Dropdown-Menüs, Optionsfelder usw. des Formulars verwenden, um die Benutzereingaben zu reduzieren, und Sie können auch die Eingabelänge des Benutzers begrenzen.

In praktischen Anwendungen wird empfohlen, keine datenbankbezogenen Funktionen zum Filtern oder Validieren von Benutzereingabedaten zu verwenden. Denn diese Funktionen können aufgrund von Datenbanksperren oder anderen Problemen fehlschlagen, was zu Sicherheitslücken führen kann.

Fazit:

Der SQL-Injection-Angriff ist eine häufige Netzwerkangriffsmethode, die in kurzer Zeit schwerwiegende Folgen haben kann. SQL-Injection-Angriffe können jedoch wirksam abgewehrt werden, indem vorbereitete Anweisungen verwendet, Benutzereingaben gefiltert und Benutzereingaben minimiert werden. Bleiben Sie online sicher, indem Sie wachsam bleiben und Ihr Wissen ständig aktualisieren.

Das obige ist der detaillierte Inhalt vonPHP implementiert sichere Programmierung: SQL-Injection und -Verteidigung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn