Heim > Datenbank > MySQL-Tutorial > Reicht „mysqli_real_escape_string' aus, um SQL-Injection zu verhindern?

Reicht „mysqli_real_escape_string' aus, um SQL-Injection zu verhindern?

DDD
Freigeben: 2024-12-17 20:30:19
Original
234 Leute haben es durchsucht

Is `mysqli_real_escape_string` Sufficient to Prevent SQL Injection?

Ist mysqli_real_escape_string ausreichend, um SQL-Injection zu verhindern?

Frage:

Im bereitgestellten PHP Ist die Verwendung von mysqli_real_escape_string ausreichend, um SQL-Injection zu verhindern? Angriffe?

  $email= mysqli_real_escape_string($db_con,$_POST['email']);
  $psw= mysqli_real_escape_string($db_con,$_POST['psw']);

  $query = "INSERT INTO `users` (`email`,`psw`) VALUES ('".$email."','".$psw."')";
Nach dem Login kopieren

Antwort:

Nein, sich allein auf mysqli_real_escape_string zu verlassen, reicht nicht aus, um SQL-Injection und andere SQL-Angriffe zu verhindern.

Vorbereitet -Anweisungen bieten eine robustere Lösung zur Verhinderung der SQL-Injection. Sie trennen Daten und Anweisungen und stellen so sicher, dass vom Benutzer bereitgestellte Eingaben die Struktur der Abfrage nicht beeinträchtigen.

In Situationen, in denen vorbereitete Anweisungen nicht verwendet werden können, kann die Implementierung einer strengen Whitelist für bestimmte Zwecke einen gewissen Schutz bieten. Dazu gehört die Definition einer vorgegebenen Liste akzeptabler Werte für jeden Parameter, um böswillige Eingaben zu verhindern.

Beispiel für die Verwendung einer Whitelist und Typumwandlung:

switch ($sortby) {
    case 'column_b':
    case 'col_c':
        // Safe to use
        break;
    default:
        $sortby = 'rowid';
}

$start = (int) $start;
$howmany = (int) $howmany;
if ($start < 0) {
    $start = 0;
}
if ($howmany < 1) {
    $howmany = 1;
}

// Execute the query using prepared statements
$stmt = $db->prepare(
    "SELECT * FROM table WHERE col = ? ORDER BY {$sortby} ASC LIMIT {$start}, {$howmany}"
);
$stmt->execute(['value']);
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
Nach dem Login kopieren

Es muss unbedingt sichergestellt werden, dass vorbereitete Anweisungen verwendet werden Emulierte Vorbereitungen sind deaktiviert, insbesondere bei Verwendung von MySQL.

$db->setAttribute(\PDO::ATTR_EMULATE_PREPARES, false);
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonReicht „mysqli_real_escape_string' aus, um SQL-Injection zu verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage