2009-11-16 2 views
4

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

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

ответ

12

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

ли что-то вроде этого псевдокода на приемном конце:

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";} 

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

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

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

+0

Если вы говорите о безопасности: Абсолютно. Любые входящие данные можно манипулировать свободно. –

+0

Вы должны выполнить этот тип проверки как на клиенте, так и на сервере. На сервере, чтобы предотвратить прикрепление инъекций, как Джереми Пауэлл, рекомендуется и на клиенте предотвращать попадание плохих данных на сервер. – ajrawson

+0

Даже не нужно использовать cURL. Я мог бы просто Firebug в поле, заменить текст или использовать панель инструментов веб-разработчика. Или Передача. Это очень легко с небольшим количеством ноу-хау. – alex

3

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

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

1

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

0

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

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

2

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

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

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

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

Смежные вопросы