Недостатки mysql_real_escape_string?
Я видел, как несколько человек здесь утверждают, что объединение запросов с использованиемmysql_real_escape_string
не защитит вас (полностью) от атак SQL-инъекций.
Тем не менее, мне еще предстоит увидеть пример ввода, который иллюстрирует атаку, котораяmysql_real_escape_string
не защитит вас от Большинство примеров забывают, чтоmysql_query
ограничен одним запросом и использованиемmysql_real_escape_string
неправильно.
Единственный пример, который я могу вспомнить, это следующее:
mysql_query('DELETE FROM users WHERE user_id = '.mysql_real_escape_string($input));
Это не защитит вас от следующего ввода:
5 OR 1=1
Я бы видел это как неправильное использованиеmysql_real_escape_string
скорее, чем недостаток, он предназначен для строк, а не числовых значений. Вы должны либо привести к числовому типу, либо, если вы собираетесь обрабатывать ввод как строку при очистке, вы должны сделать то же самое в запросе и заключить его в кавычки.
Может кто-нибудь привести пример ввода, который можно обойтиmysql_real_escape_string
это не зависит от неправильной обработки числовых значений или забыть, чтоmysql_query
можно выполнить только один запрос?
Изменить: меня интересуют ограниченияmysql_real_escape_string
и не сравнивая его с альтернативами, я понимаю, что есть лучшие варианты для новых проектов, и я не оспариваю это.