2013-04-15 3 views
3

Я проходил через свое приложение, пытаясь обеспечить его как можно больше, и это заставило меня задуматься. Я всегда проверяю ввод своего пользователя, и я всегда сглаживаю ввод, так что, например, если у меня есть поле «день рождения», я уверен, что это действительная дата, прежде чем поместить его в базу данных. Но у меня также есть поля в моей базе данных, такие как «passwordresettoken», и у меня есть код, генерирующий это поле, если пользователь запросит его.Могут ли хакеры обманывать или вводить поля формы?

Теперь, на моей обычной странице профиля пользователя, у меня, очевидно, нет поля с именем «passwordresettoken», поэтому я не проверяю его и не очищаю, потому что он не должен существовать в форме, которая будет передана. На самом деле, это никогда не должно быть передано, поскольку это не то, что пользователь когда-либо вводил.

Итак, мой вопрос в том, можно ли обманывать поля ввода? Могли ли они отредактировать HTML на моей странице, чтобы включить поле passwordresettoken, а затем нанести какой-то ущерб при передаче формы?

+2

До тех пор, пока вы не вставляя это поле в вашу базу данных, не существует какой-либо способ использовать его для компрометации вашей базы данных. – Blender

+0

Какой блендер сказал и что вы проверяете входные данные, чтобы предотвратить инъекцию. – ArgumentNullException

+0

Пользователь может POST, что они хотят. Существуют различные инструменты, доступные для браузеров, например. [Fiddler] (http://fiddler2.com/), чтобы обеспечить удобное изменение данных, отправленных для целей тестирования. Если вы автоматически загружаете любое поле и обрабатываете его, даже если это неожиданно, тогда у вас могут быть интересные проблемы. Даже ожидаемые данные могут иметь неожиданные значения, например. значение, которое вы не указали в списке выбора. Существует еще одна возможность, если данные формы можно переопределить, добавив значения в URL. – HABO

ответ

5

Да абсолютно. Мне даже не нужно смотреть на ваш HTML. Я могу отправить напрямую с помощью curl.

http://curl.haxx.se/docs/httpscripting.html

Этого HTML

<form method="POST" action="junk.cgi"> 
     <input type=text name="birthyear"> 
     <input type=submit name=press value=" OK "> 
    </form> 

эквивалентен этого завиток запросу

curl --data "birthyear=1905&press=%20OK%20" http://www.example.com/junk.cgi 
+0

Предполагается, что OP сохраняет поле в скрытом поле ввода. Если значение строго внутреннее (например, временный токен для сброса пароля), это невозможно. – Blender

+0

Я предполагаю, что OP делает что-то вроде (псевдокода) '' таблица UPDATE ('+ join (', ', keys (GET_VARS)) +') ('+ join (', ', values ​​(GET_VARS)) + ')' ', который абсолютно тупой, но я вижу, что происходит. –

+0

@JoeFrambach ok, так что тогда это возможно. Каков наилучший способ действий здесь? 1. Проверьте, существует ли поле в представленной структуре, а 2. очистите его? – Amir

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