Mysql_real_escape_string kullanmak Neden addslashes şeyi engellemez?

2 Cevap php

Ben dokümanlar bakarak ve mysql_real_escape_string tökezledi () ve sadece () addslashes zaman yararlıdır neden ben anlayamıyorum edildi. Birisi yararlı neden olarak bana bir senaryo gösterebilir miyim?

O yükü bir sürü gibi görünüyor .... bir veritabanı bağlantısı gerektirir neden ben de merak ediyorum.

2 Cevap

There is a great article about this here. Ve bu discussion da her çözümün artılarını ve eksilerini işaret.

addslashes() was from the developers of PHP whereas mysql_real_escape_string uses the underlying MySQL C++ API (i.e. from the developers of MySQL). mysql_real_escape_string escapes EOF chars, quotes, backslashes, carriage returns, nulls, and line feeds. There is also the charset aspect.

Nether mysql_real_escape_string () veya addslashes () her şeyi (ne XSRF? Bile xss hakkında ya da), ve tüm SQL Injection önlemek Bunlardan en önemlisi cehennem önlemek.

Örneğin bu kod sql enjeksiyon için açıktır:

mysql_query("select * from user where id=".mysql_real_escape_string($_GET[id]));

Exploit:

http://localhost/test.php?id=1 or sleep(50)

yama:

mysql_query("select * from user where id='".mysql_real_escape_string($_GET[id])."'");

ADODB veya PDO biriyle parametrized sorguları kullanın, bu sadece kurşun geçirmez SQL injection korunmasıdır.