Rumah >pangkalan data >tutorial mysql >Adakah `mysql_real_escape_string()` dan `mysql_escape_string()` Cukup untuk Melindungi Aplikasi Web Saya Terhadap SQL Injection?

Adakah `mysql_real_escape_string()` dan `mysql_escape_string()` Cukup untuk Melindungi Aplikasi Web Saya Terhadap SQL Injection?

Susan Sarandon
Susan Sarandonasal
2024-12-13 03:16:14771semak imbas

Are `mysql_real_escape_string()` and `mysql_escape_string()` Enough to Secure My Web Application Against SQL Injection?

Adakah mysql_real_escape_string() dan mysql_escape_string() Mencukupi untuk Keselamatan Aplikasi?

Walaupun fungsi ini boleh meningkatkan perlindungan data, ia tidak mencukupi untuk melindungi sepenuhnya aplikasi web daripada semua keselamatan risiko.

SQL Injection

  • Mysql_escape_string() mungkin masih menyebabkan anda terdedah kepada serangan suntikan SQL, terutamanya jika data pembolehubah digunakan dalam pertanyaan.

SUKA SQL Serangan

  • SUKA pertanyaan dengan parameter seperti "�ta%" boleh dieksploitasi untuk mengembalikan semua rekod atau mendedahkan maklumat sensitif, seperti nombor kad kredit penuh.

Eksploitasi Charset

  • Internet Explorer kekal terdedah kepada eksploitasi charset, yang boleh memberikan kawalan pangkalan data jauh kepada pelaku yang berniat jahat.

Eksploitasi LIMIT

  • Mysql_real_escape_string() tidak berkesan terhadap serangan eksploitasi LIMIT yang boleh melaksanakan pertanyaan SQL sewenang-wenangnya dengan memanipulasi LIMIT nilai.

Pertahanan Proaktif: Pernyataan Disediakan

  • Daripada bergantung semata-mata untuk melarikan diri, pertimbangkan untuk menggunakan pernyataan yang disediakan untuk mengelakkan pelaksanaan SQL yang tidak dijangka.
  • Pernyataan yang disediakan menguatkuasakan sintaks SQL bahagian pelayan yang sah, mengurangkan risiko kedua-dua kelemahan yang diketahui dan tidak diketahui.

Contoh Kod

Berikut ialah perbandingan mysql_escape_string() dan pernyataan yang disediakan dalam PHP:

// Escaping Method
$sql = sprintf("SELECT url FROM GrabbedURLs WHERE %s LIKE '%s%%' LIMIT %s",
               mysql_real_escape_string($argv[1]),
               mysql_real_escape_string($argv[2]),
               mysql_real_escape_string($argv[3]));

// Prepared Statement
$statement = $pdo->prepare('SELECT url FROM GrabbedURLs ' .
                           'WHERE ' . $column . '=? ' .
                           'LIMIT ' . intval($limit));
$statement->execute(array($value));

Pernyataan yang disediakan, sementara sedikit lebih lama untuk dilaksanakan, menawarkan perlindungan unggul terhadap pertanyaan SQL yang berniat jahat dan mengurangkan kerumitan kod.

Atas ialah kandungan terperinci Adakah `mysql_real_escape_string()` dan `mysql_escape_string()` Cukup untuk Melindungi Aplikasi Web Saya Terhadap SQL Injection?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn