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
615 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!

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