Хорошо, рассмотрим этот случай:
a) У вас есть функция Javascript, которая выполняет AJAX-вызов для выполнения запроса на вашем сервере, и это что-то вроде:
function doQuery(tablename, fieldname, whereclause) { ... }
bНа сервере вы динамически создаете запрос, используя переданные параметры этого вызова AJAX:
$query = "SELECT $fieldname FROM $tablename WHERE $whereclause";
Что мешает злоумышленнику внедрить вызов вашей функции AJAX с помощью
fieldname = '*'
tablename = 'mysql.user'
whereclause = '1=1'
В итоге вы получите
SELECT * from mysql.user WHERE 1=1
, и вся ваша коллекция имен пользователей и паролей в MySQL с радостью выйдет за дверь.
Никогда и никогда не позволяйте предоставленным пользователем данным контролировать то, что делает ваш код,особенно когда дело доходит до взаимодействия с «внешними» системами, такими как база данных.