Зачем использовать mysql_real_escape_string, не помешает ли все это предотвратить?

Я просматривал документы и натыкался на mysql_real_escape_string (), и я не понимаю, почему он полезен, когда вы можете просто addlashes (). Может ли кто-нибудь показать мне сценарий, почему это полезно?

Мне также интересно, почему для этого требуется соединение с базой данных … это кажется большим количеством накладных расходов.

Solutions Collecting From Web of "Зачем использовать mysql_real_escape_string, не помешает ли все это предотвратить?"

Об этом есть замечательная статья. И это обсуждение также указывает на плюсы и минусы каждого решения.

addslashes () был из разработчиков PHP, тогда как mysql_real_escape_string использует базовый MySQL C ++ API (т. е. от разработчиков MySQL). mysql_real_escape_string экранирует символы EOF, кавычки, обратные косые черты, возврат каретки, нули и линейные фиды. Существует также аспект шашлыка.

Nether mysql_real_escape_string () или addslashes () предотвращает все (что касается xss или даже xsrf?), И, что самое главное, они предотвращают все инъекции SQL.

Например, этот код уязвим для SQL-инъекции:

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

Exploit:

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

патч:

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

Используйте параметризованные запросы с помощью ADODB или PDO, это единственная защита от инъекций с помощью bullet sql.