Я видел, как несколько человек здесь заявили, что объединение запросов с помощью 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
и не сравнивая их с альтернативами, я понимаю, что есть лучшие варианты для новых проектов, и я не оспариваю это.