Ответ на ваш вопрос - нет. Mysql_real_escape_string () не подходит для всех пользовательских вводов, а mysql_real_escape_string () не останавливает все инъекции sql. addlashes () - еще одна популярная функция, используемая в php, и у нее та же проблема.
уязвимый код:
mysql_query("select * from user where id=".mysql_real_escape_string($_GET[id]));
Poc Exploit:
http://localhost/sql_test.php?id=1 or sleep(500)
Патч должен использовать кавычки вокруг id:
mysql_query("select * from user where id='".mysql_real_escape_string($_GET[id])."'");
Действительно, лучший подход - это использовать параметризованные запросы, на которые указали многие люди. Pdo работает хорошо, adodb - еще одна популярная библиотека для php.
Если вы используете mysql_real_escape_string, его следует использовать только для внедрения SQL, и ничего больше. Уязвимости в значительной степени зависят от того, как используются данные. Следует применять меры безопасности в зависимости от функции. И да, XSS - это ОЧЕНЬ СЕРЬЕЗНАЯ ПРОБЛЕМА . Не фильтровать html - это серьезная ошибка, которую хакер будет использовать для вас. Пожалуйста, прочитайте xss faq .