Я просматривал документы и натыкался на mysql_real_escape_string (), и я не понимаю, почему он полезен, когда вы можете просто addlashes (). Может ли кто-нибудь показать мне сценарий, почему это полезно?
Мне также интересно, почему для этого требуется соединение с базой данных … это кажется большим количеством накладных расходов.
Об этом есть замечательная статья. И это обсуждение также указывает на плюсы и минусы каждого решения.
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.