Adakah mysql_real_escape_string() dan mysql_escape_string() Cukup untuk Melindungi Aplikasi MySQL?

Mary-Kate Olsen
Lepaskan: 2024-11-01 03:03:28
asal
993 orang telah melayarinya

Are mysql_real_escape_string() and mysql_escape_string() Enough to Secure MySQL Applications?

Keselamatan MySQL: Adakah mysql_real_escape_string() dan mysql_escape_string() Mencukupi?

Keberkesanan mysql_real_escape_string()_real_escape_string) telah mencetuskan beberapa perdebatan. Walaupun fungsi ini menghalang vektor suntikan SQL yang diketahui, batasannya mungkin menyebabkan anda terdedah kepada serangan yang lebih maju.

Kerentanan Suntikan SQL

Walaupun menggunakan mysql_real_escape_string(), anda boleh masih terdedah kepada suntikan SQL dalam senario di mana pembolehubah PHP disepadukan ke dalam pertanyaan. Sebagai contoh, pertimbangkan kod ini:

<code class="php">$sql = "SELECT number FROM PhoneNumbers " .
       "WHERE " . mysql_real_escape_string($field) . " = " . mysql_real_escape_string($value);</code>
Salin selepas log masuk

Penggodam yang canggih boleh mengeksploitasi pertanyaan ini dengan input berikut:

<code class="php">$field = "1=1"
$value = "1"</code>
Salin selepas log masuk

Ini memintas logik yang dimaksudkan, mengembalikan (berpotensi) semua rekod sebaliknya daripada yang sepadan dengan kriteria yang ditetapkan.

LIKE Attacks

mysql_real_escape_string() tidak berkesan dalam mencegah serangan LIKE, seperti:

<code class="php">$sql = "SELECT number FROM PhoneNumbers " .
       "WHERE " . mysql_real_escape_string($field) . " LIKE " . mysql_real_escape_string($value);</code>
Salin selepas log masuk

A pengguna berniat jahat boleh menetapkan $value kepada % untuk mendapatkan semula semua rekod, yang berpotensi mendedahkan data sensitif.

Eksploitasi Charset

Internet Explorer kekal terdedah kepada eksploitasi charset, walaupun pada tahun 2011. Kerentanan ini boleh memberikan penyerang kawalan ke atas pangkalan data anda, sama seperti suntikan SQL.

Pernyataan Disediakan: Pendekatan Proaktif

Kedua-dua mysql_real_escape_string() dan mysql_escape_string() adalah terdedah kerana terdedah ia adalah mekanisme pertahanan reaktif. Kenyataan yang disediakan, sebaliknya, memberikan penyelesaian yang proaktif. Dengan melaksanakan hanya SQL yang sah dan diprogramkan, pernyataan yang disediakan secara mendadak mengurangkan risiko pelaksanaan SQL yang tidak dijangka, tanpa mengira kelemahan pangkalan data asas.

Berikut ialah contoh menggunakan pernyataan yang disediakan:

<code class="php">$statement = $pdo->prepare('SELECT url FROM GrabbedURLs ' .
                           'WHERE ' . $column . '=? ' .
                           'LIMIT ' . intval($limit));
$statement->execute(array($value));</code>
Salin selepas log masuk

Pernyataan yang disediakan adalah selamat dan kurang bertele-tele daripada menggunakan mysql_real_escape_string(). Mereka bergantung pada langkah perlindungan pelayan pangkalan data untuk melindungi daripada ancaman yang diketahui dan tidak diketahui.

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

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan