Защита от ввода пользователя в выпадающем списке? - PullRequest
4 голосов
/ 16 ноября 2009

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

Как они могут это сделать и как мы можем остановить это?

Ответы [ 6 ]

12 голосов
/ 16 ноября 2009

Абсолютно проверьте это.

Сделайте что-то вроде этого псевдокода на принимающей стороне:

if { posted_value is_element_of($array_of_your_choices) }
    //processing code
else {
    //prompt them for good input
}

Так, например: Ваш выпадающий список содержит основные цвета, которые они хотели бы нарисовать в своем доме. Вы бы (в PHP)

$colors = array('red', 'blue', 'yellow');

if in_array($_POST['color'], $colors)
    { //process this code! dispatch the painters; }
else {echo "sorry, that's not a real color";}

Редактировать: Это, безусловно, возможно. Если ваши значения отправляются с помощью запроса GET, то пользователь может просто ввести www.example.com/?price=0, чтобы получить бесплатный дом. Если это запрос POST, он может показаться немного сложнее, но на самом деле это не так:

curl_setopt($ch, CURLOPT_POSTFIELDS,"price=0");

Люди могут просто использовать cURL для непосредственной манипуляции запросом POST, в дополнение к тривиально большому количеству других клиентов.

3 голосов
/ 16 ноября 2009

Пользователь может просто вручную написать HTTP-запрос, который заполнил вредоносные данные. Например, для запросов GET у вас может быть выпадающий список «State», в котором перечислены Алабама, Арканзас и т. Д. Он может поместить http://example.com? State = evilstuff просто в строку URL браузера.

Это легко предотвратить, поскольку вы уже точно знаете, что находится в выпадающем списке. Просто проверьте, находится ли ввод в этом списке или нет, должно быть достаточно для предотвращения атак, подобных инъекциям. Если он вводит что-то, кроме допустимого имени состояния, выдает ошибку.

2 голосов
/ 16 ноября 2009

Это можно сделать только путем изменения ответа HTTP. Итак,

  • да, это можно сделать, и вам нужно защититься от этого (то есть проверить, может ли это быть угрозой безопасности и, если да, проверить ввод), но
  • нет, вам не нужно выводить «красивое» сообщение об ошибке, поскольку это не может произойти с обычным пользователем «случайно».
1 голос
/ 16 ноября 2009

Когда мне скучно, я редактирую выпадающие списки на веб-сайтах просто для удовольствия. В основном это просто ломает сайт, но, по крайней мере, однажды я мог бы получить бесплатные или радикально снизить цены на билеты, просто играя со скрытыми полями сайта. (Увы, это было для компании, в которой я работал, поэтому мне пришлось вместо этого сообщить об ошибке.)

0 голосов
/ 16 ноября 2009

Некоторые другие ответы абсолютно верны, вы ДОЛЖНЫ проверять на ЛЮБОЙ стороне сервера любые данные, поступающие со стороны пользователя.

На работе мы используем такие инструменты, как подключаемый модуль Firefix Tamper Data, для манипулирования и просмотра данных, публикуемых на сервере, после выполнения любой проверки на стороне клиента (JavaScript). Кроме того, вы даже можете использовать простые инструменты, такие как Firebug, чтобы визуально изменить раскрывающиеся списки, чтобы они содержали значения, которые не были помещены туда сервером перед отправкой.

0 голосов
/ 16 ноября 2009

Да, злоумышленник может отправлять данные на ваш сервер, даже не используя вашу форму, и может отправлять данные, которые обычно не включаются в раскрывающийся список. Это тривиальная форма атаки, которая часто используется в реальном мире.

Всегда проверяйте правильность ввода!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...