Rumah > pangkalan data > tutorial mysql > Adakah `mysql_real_escape_string()` dan `mysql_escape_string()` Mencukupi untuk Mencegah Serangan Suntikan SQL?

Adakah `mysql_real_escape_string()` dan `mysql_escape_string()` Mencukupi untuk Mencegah Serangan Suntikan SQL?

Barbara Streisand
Lepaskan: 2024-11-29 21:20:15
asal
743 orang telah melayarinya

Are `mysql_real_escape_string()` and `mysql_escape_string()` Sufficient for Preventing SQL Injection Attacks?

Kebimbangan Keselamatan dengan mysql_real_escape_string() dan mysql_escape_string()

Adakah mysql_real_escape_string() dan mysql_escape_string() aplication keselamatan?

Walaupun kelaziman fungsi ini untuk membersihkan input pengguna, kebimbangan berterusan mengenai batasannya dalam melindungi daripada serangan SQL dan kemungkinan eksploitasi.

SQL Suntikan Kekal Ancaman :

mysql_real_escape_string() ialah terutamanya bertujuan untuk menghalang suntikan SQL standard. Walau bagaimanapun, ia memberikan perlindungan terhad terhadap teknik suntikan lanjutan.

Pertimbangkan kod ini:

$sql = "SELECT * FROM users WHERE username = '" . mysql_real_escape_string($username) . "'";
Salin selepas log masuk

Penyerang masih boleh melaksanakan suntikan dengan mengeksploitasi nama jadual atau lajur, seperti dalam:

$username = "'); DROP TABLE users; --";
Salin selepas log masuk

SUKA SQL Attacks:

SUKA SQL suntikan juga terdedah dengan fungsi ini. Contohnya, penyerang boleh:

$data = '%';
$sql = "SELECT * FROM users WHERE username LIKE '" . mysql_real_escape_string($data) . "%'"; # Can retrieve all results
Salin selepas log masuk

Eksploitasi Set Aksara Unikod:

Eksploitasi Charset boleh memberikan penyerang kawalan yang meluas, walaupun konfigurasi HTML betul.

LIMIT Eksploitasi Medan:

Melepaskan diri dari Medan LIMIT juga boleh membenarkan penyerang untuk mendapatkan semula data yang tidak dibenarkan:

$sql = "SELECT * FROM users LIMIT '" . mysql_real_escape_string($limit) . "'"; # Can retrieve all results
Salin selepas log masuk

Pernyataan Disediakan sebagai Alternatif Teguh:

Penyelesaian yang ideal untuk keselamatan pangkalan data ialah penggunaan disediakan kenyataan. Penyata yang disediakan melaksanakan pertanyaan SQL pada bahagian pelayan, menghalang SQL yang tidak dijangka daripada dilaksanakan. Pertimbangkan contoh ini:

$statement = $pdo->prepare("SELECT * FROM users WHERE username = ?");
$statement->execute(array($username));
Salin selepas log masuk

Dengan menggunakan pernyataan yang disediakan, anda memanfaatkan mekanisme perlindungan pelayan SQL dan dilindungi daripada eksploitasi yang diketahui dan tidak diketahui.

Atas ialah kandungan terperinci Adakah `mysql_real_escape_string()` dan `mysql_escape_string()` Mencukupi untuk Mencegah Serangan Suntikan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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