В первом примере по ссылке Tizag запрос выглядит так, как будто автор сценария должен извлечь не более одной строки.Таким образом, учитывая, что каждая строка будет извлечена, наиболее вероятный результат, вероятно, заключается в том, что будет обработана информация для первой возвращенной строки;поскольку в запросе tampered-with нет условия ORDER BY
, это может быть пользователь, сохраненный первым в таблице, но, конечно, порядок не определен в SQL, когда отсутствует предложение ORDER BY
, так что кто может сказать.Что вы можете сказать, так это то, что, пока таблица не пуста, она будет извлекать информацию о действительном пользователе.
Я не уверен, что вы подразумеваете под словом "if echo $name
";переменной $name
присваивается значение "timmy"
в коде.Думаю, они увидят timmy
.Если вы имеете в виду, что если бы вы попытались передать информацию о пользователях, полученную в результате запроса, то что бы они увидели - ну, это зависит от кода, который вы используете.Если вы просматриваете набор результатов, и они использовали SQL-инъекцию для извлечения строк, которые вы не ожидали получить, то они, скорее всего, увидят все строки, включая строки, которые вы не собирались их видеть.Если ваш код просто извлекает информацию из одной строки и воздействует на нее, то они все равно будут видеть одну строку, хотя, опять же, это может быть строка, которую вы не хотели, чтобы они могли достичь.
Что касаетсяпочему функциональность, предлагаемая mysql_real_escape_string()
, не является автоматической, это потому, что для ее автоматической работы компьютер должен был бы выполнять из кода SQL то, что вы намеревались сделать, а не просто делать то, что вы сказали.Это и сложно, и откровенно нежелательно, потому что никто не хочет, чтобы компьютер догадывался о том, что они хотят делать (особенно программисты).
Если вы хотите иметь возможность отказаться от использования mysql_real_escape_string()
иНапример, вы можете захотеть использовать параметризованные запросы, которые позволят вам использовать немного более непринужденный подход.Тем не менее, вы все еще должны дать компьютеру понять, какие части вашего запроса являются переменными, которые вы хотите экранировать, хотя, потому что это всего лишь неотъемлемая часть передачи компьютеру того, что вы хотите, чтобы произошло.