Adakah Menggunakan `mysql_real_escape_string()` dan `mysql_escape_string()` Cukup untuk Melindungi Aplikasi Anda?

Mary-Kate Olsen
Lepaskan: 2024-11-03 10:58:03
asal
570 orang telah melayarinya

Is Using `mysql_real_escape_string()` and `mysql_escape_string()` Enough to Secure Your Application?

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

Walaupun fungsi ini boleh memberikan sedikit perlindungan terhadap suntikan SQL dan serangan lain , mereka gagal menangani perkara tertentu kelemahan.

SQL Injection

Mysql_real_escape_string() masih boleh mendedahkan aplikasi anda kepada suntikan SQL jika anda mengendalikan pembolehubah PHP secara tidak wajar dalam pertanyaan. Pertimbangkan contoh berikut:

$sql = "SELECT number FROM PhoneNumbers WHERE " . 
        mysql_real_escape_string($field) . " = " . mysql_real_escape_string($value);  
Salin selepas log masuk

Pertanyaan ini boleh dimanipulasi oleh penyerang untuk melaksanakan pernyataan SQL yang tidak dibenarkan, kerana mysql_real_escape_string() tidak direka bentuk untuk melindungi nama jadual, nama lajur atau medan LIMIT.

Suka Serangan

Mysql_real_escape_string() tidak mencukupi untuk menghalang eksploitasi LIKE. Penyerang boleh memasukkan nilai hasad seperti "%%" untuk mengembalikan semua rekod, yang berpotensi menjejaskan maklumat sensitif.

Eksploitasi Charset

Pelayar tertentu mungkin terdedah kepada charset eksploitasi, membenarkan penyerang menyuntik watak jahat yang memintas mekanisme melarikan diri dan melaksanakan SQL sewenang-wenangnya arahan.

Pernyataan Disediakan: Penyelesaian Komprehensif

Untuk memastikan permohonan anda dengan berkesan, adalah disyorkan untuk menggunakan pernyataan yang disediakan dan bukannya mysql_real_escape_string(). Penyataan yang disediakan melaksanakan pertanyaan SQL dengan nilai yang dibekalkan pengguna dengan mengikatnya sebagai parameter. Ini menghapuskan keperluan untuk melarikan diri secara manual dan memastikan bahawa hanya SQL yang dibenarkan dilaksanakan.

Berikut ialah contoh penggunaan pernyataan yang disediakan dalam PHP:

$pdo = new PDO($dsn);

$column = 'url';
$value = 'http://www.example.com/';
$limit = 1;

// Validate the search parameter column.
$validColumns = array('url', 'last_fetched');
if (!in_array($column, $validColumns)) { $column = 'id'; }

$statement = $pdo->prepare('SELECT url FROM GrabbedURLs ' .
                           'WHERE ' . $column . '=? ' .
                           'LIMIT ' . intval($limit));
$statement->execute(array($value));
while (($data = $statement->fetch())) { }
Salin selepas log masuk

Pernyataan yang disediakan menawarkan mekanisme pertahanan proaktif oleh memanfaatkan ciri keselamatan pelayan pangkalan data asas. Ia sememangnya tahan terhadap serangan yang diketahui dan tidak diketahui, memastikan integriti data anda.

Atas ialah kandungan terperinci Adakah Menggunakan `mysql_real_escape_string()` dan `mysql_escape_string()` Cukup untuk Melindungi Aplikasi Anda?. 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