Могут ли лишние ненужные ключи $ _POST нанести вред системе? - PullRequest
1 голос
/ 16 августа 2011

Представим, где находятся входные данные, такие как:

<input name="x" />
<input name="y" />
<input name="z" />

Может ли быть какой-либо вред, если пользователь вручную, например, с помощью FireBug создает больше входов с разными именами?

I 'Я спрашиваю об этом, потому что моя команда вчера создала правило, согласно которому вам нужно вручную фильтровать массив $_POST (например), чтобы убедиться, что в нем есть только ожидаемые ключи.Лично я не вижу никакого вреда, если бы были дополнительные ключи, такие как foo и bar.Они будут проигнорированы, верно?

Кроме того, мы используем Kohana 3.0 и его ORM.Может в этом весь смысл?Может быть, ORM будет реагировать по-разному на дополнительные, ненужные ключи и, может быть, обновлять неожиданные столбцы в базе данных, если «хакер» угадает «неправильный» ключ (также и столбец)?

Как вы думаете?

Ответы [ 3 ]

3 голосов
/ 16 августа 2011

Это проблема в некоторых средах, таких как Ruby on Rails и ASP.NET MVC, где это может происходить как массовое назначение.

Рассмотрим модель учетной записи пользователя, в которой у вас есть имя пользователя, пароль, адрес электронной почты, а затем логический флаг, определяющий, является ли пользователь администратором. Вы создаете форму для самостоятельной регистрации, и, поскольку вы, конечно, не хотите, чтобы пользователи позволяли себе становиться администратором, вы включаете в свою форму только три первых поля. Однако в этих структурах (если вы не отключите его) будет назначено любое поле формы с определенным именем (независимо от того, пришли они или нет из фактической формы). Поэтому, если злоумышленник добавил поле с именем что-то вроде user [admin] = 1, оно может быть назначено «магическим» бэкэндом и фактически повлиять на данные, даже если вы никогда не обрабатывали эту переменную явно.

2 голосов
/ 16 августа 2011

Эрлен прав в том, что если вы просто добавите $_POST в ORM, то вы, скорее всего, столкнетесь с проблемами безопасности, но он ошибается насчет Коханы.Начиная с Kohana 3. * метод ORM values() принимает второй аргумент, который является массивом ожидаемых ключей.

Итак, следующий пример

$user = ORM::factory('user');
$user->values($_POST, array('username', 'password')
$save->save();

Исходный код для значений ()

будет использовать только поля имени пользователя и пароля из массива.

1 голос
/ 16 августа 2011

Если вы используете какую-то автоматизацию, которая преобразует все переменные POST в SQL-запрос, возможно, что-то заявлено.Я не знаю, что делает Kohana, но некоторые фреймворки имеют функцию save_to_database( $data ), которая выбирает переменные из $data, которые имеют соответствующие поля в таблице, поэтому теоретически злоумышленник может сохранить больше данных в базе данных, чем ониПредположим, отправив дополнительные ключи.(Большинство фреймворков также позволяют передавать массив разрешенных полей в функцию, которая предотвращает подобные атаки.)

...