Keselamatan aplikasi terhadap serangan SQL adalah kebimbangan yang penting. Pembangun sering bergantung pada fungsi seperti mysql_real_escape_string() dan mysql_escape_string() untuk melindungi daripada serangan ini. Walau bagaimanapun, adakah fungsi ini mencukupi untuk memastikan perlindungan mutlak?
Penghadan mysql_real_escape_string() dan mysql_escape_string()
Walaupun nampaknya kegunaannya, fungsi ini gagal dalam beberapa aspek :
SQL Injection Attacks: Walaupun fungsi ini mungkin menawarkan perlindungan separa terhadap serangan suntikan SQL tradisional, ia tetap terdedah kepada teknik lanjutan, seperti serangan yang menyasarkan nama jadual, nama lajur atau LIMIT medan.
LIKE Serangan: Serangan yang mengeksploitasi pengendali LIKE, seperti mencari "%", boleh mengembalikan hasil yang tidak diingini dan menjejaskan keselamatan.
Eksploitasi Charset : Kerentanan set aksara, terutamanya dalam Internet Explorer, boleh membenarkan penggodam mendapat kawalan yang ketara, termasuk melaksanakan suntikan SQL.
Perlindungan Proaktif melalui Penyata Disediakan
Kepada menangani batasan ini, pakar keselamatan mengesyorkan menggunakan kenyataan yang disediakan. Penyata yang disediakan mengambil pendekatan proaktif dengan membenarkan pelayan pangkalan data itu sendiri mengendalikan pelaksanaan SQL. Pengesahan bahagian pelayan ini menghalang pertanyaan SQL yang tidak dijangka atau berniat jahat daripada dilaksanakan, dengan itu memberikan pertahanan yang teguh terhadap serangan yang diketahui dan juga tidak diketahui.
Kod Contoh dengan Penyata Disediakan
Berikut ialah contoh kod yang menunjukkan penggunaan pernyataan yang disediakan:
$pdo = new PDO($dsn); $column = 'url'; $value = 'http://www.stackoverflow.com/'; $limit = 1; $validColumns = array('url', 'last_fetched'); // Validate $column for security if (!in_array($column, $validColumns) { $column = 'id'; } $statement = $pdo->prepare('SELECT url FROM GrabbedURLs ' . 'WHERE ' . $column . '=? ' . 'LIMIT ' . intval($limit)); $statement->execute(array($value));
Kesimpulan
Manakala mysql_real_escape_string() dan mysql_escape_string() menawarkan beberapa tahap perlindungan terhadap SQL serangan, mereka mempunyai batasan yang menjadikannya tidak mencukupi untuk keselamatan yang menyeluruh. Menggunakan pernyataan yang disediakan ialah pendekatan yang disyorkan untuk perlindungan yang teguh terhadap serangan yang diketahui dan tidak diketahui. Kenyataan yang disediakan menyediakan pertahanan proaktif dengan memanfaatkan pengesahan sisi pelayan, memastikan keselamatan data kritikal dan melindungi aplikasi daripada kelemahan.
Atas ialah kandungan terperinci Adakah mysql\\_real\\_escape\\_string() dan mysql\\_escape\\_string() Menyediakan Perlindungan yang Cukup Terhadap Serangan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!