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

Adakah `mysql_real_escape_string()` dan `mysql_escape_string()` Cukup untuk Melindungi Apl Saya daripada SQL Injection?

Mary-Kate Olsen
Lepaskan: 2024-12-06 03:34:12
asal
233 orang telah melayarinya

Are `mysql_real_escape_string()` and `mysql_escape_string()` Enough to Secure My App from SQL Injection?

Adakah MySql_real_escape_string() dan mysql_escape_string() Mencukupi untuk Keselamatan Apl? Menilai Kerentanan Berpotensi

Walaupun penggunaannya yang biasa, mysql_real_escape_string() dan mysql_escape_string() mungkin tidak melindungi sepenuhnya pangkalan data daripada serangan SQL, menjadikannya terdedah kepada pelbagai eksploitasi berniat jahat.

>>

Bertentangan dengan kepercayaan popular, mysql_real_escape_string() tidak boleh menghalang suntikan SQL dalam semua senario. Ia secara berkesan melepaskan data pembolehubah tetapi gagal melindungi nama jadual, nama lajur atau LIMIT medan daripada manipulasi berniat jahat. Had ini boleh dieksploitasi oleh penyerang untuk mencipta pertanyaan seperti berikut:
$sql = "SELECT number FROM PhoneNumbers WHERE " . mysql_real_escape_string($field) . " = " . mysql_real_escape_string($value);
Salin selepas log masuk

Penggodam mahir masih boleh memintas fungsi melarikan diri ini dengan memanipulasi medan atau pembolehubah nilai untuk mencipta pertanyaan berniat jahat.

LIKE SQL Attacks

LIKE SQL attacks juga boleh memintas mysql_real_escape_string() perlindungan. Pertanyaan yang melibatkan penyataan SEPERTI "$data%", penyerang boleh memberikan rentetan kosong sebagai input untuk memadankan semua rekod, yang berpotensi mendedahkan maklumat sensitif seperti nombor kad kredit.

Eksploitasi Charset

Eksploitasi charset kekal sebagai ancaman, terutamanya dalam Internet Explorer. Dengan mengeksploitasi perbezaan set aksara antara pangkalan data dan penyemak imbas web, penyerang boleh melaksanakan pertanyaan berniat jahat yang mendapat kawalan penuh ke atas pelayan SQL.

Eksploitasi LIMIT

Eksploitasi LIMIT membenarkan penyerang untuk memanipulasi klausa LIMIT bagi pertanyaan SQL, menggunakannya untuk menyertai berbilang pertanyaan dan melaksanakan tanpa kebenaran arahan.

Pernyataan Disediakan sebagai Pertahanan Teguh

Untuk memerangi kelemahan ini dan memastikan keselamatan aplikasi yang berkesan, kenyataan yang disediakan muncul sebagai mekanisme pertahanan pilihan. Penyata yang disediakan menggunakan pengesahan sisi pelayan untuk melaksanakan hanya pernyataan SQL yang dibenarkan, memberikan pertahanan proaktif terhadap kedua-dua eksploitasi yang diketahui dan tidak diketahui.

Contoh Kod Menggunakan Penyata Disediakan

$pdo = new PDO($dsn);

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

$validColumns = array('url', 'last_fetched');

// Validate the $column parameter
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

Kesimpulan

Sementara mysql_real_escape_string() dan mysql_escape_string() menyediakan beberapa perlindungan terhadap serangan SQL, ia tidak mudah. Melaksanakan kenyataan yang disediakan ialah penyelesaian yang lebih komprehensif dan teguh yang melindungi aplikasi daripada pelbagai kelemahan, memastikan keselamatan apl yang lebih baik.

Atas ialah kandungan terperinci Adakah `mysql_real_escape_string()` dan `mysql_escape_string()` Cukup untuk Melindungi Apl Saya daripada SQL Injection?. 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