Как отличить HTTP-запрос, отправленный от формы HTML, и HTTP-запрос, отправленный от клиента? - PullRequest
0 голосов
/ 25 сентября 2008

Есть ли способ (в сервлете Java) определить, является ли запрос HTTP POST или GET результатом отправки из формы HTML или иным образом?

Ответы [ 7 ]

6 голосов
/ 25 сентября 2008

Вы могли бы сделать это с помощью скрытого поля формы + cookie.

То, что вы могли бы сделать, это настроить nonce и использовать его в качестве скрытого поля формы. Затем вы примените это к cookie-файлу, который отправляется вместе с формой. Файл cookie должен быть связан со скрытым полем, а также должен содержать некоторый тип одноразового номера. Наконец, когда форма отправлена, вы можете проверить cookie и скрытое поле, и посмотреть, верны ли они. Если хотите, свяжите его с IP-адресом и пользовательским агентом исходного запроса формы. Вы могли бы даже оживить все это с помощью Javascript. Для начала сделайте пустое скрытое поле пустым, а затем несколько ajax для запроса одноразового номера скрытого поля с сервера.

Это не будет идеально, но это даст вам 80-90% пути. Кто-то с хорошими навыками HTTP все еще может подделать его.

Однако возникает вопрос: почему вы хотите дифференцировать запрос на этом уровне?

Или вы действительно пытаетесь понять, нажал ли пользователь кнопку «отправить»? (Если это так, то пара имя / значение кнопки отправки должна находиться в объекте запроса / строке запроса ... в зависимости от метода формы.)

0 голосов
/ 25 сентября 2008

Вам не ясно, хотите ли вы провести различие между законными методами доступа с разным доступом или против поддельных атак (т. Е. Роботов или хакеров, которые пытаются выглядеть как обычные пользователи).

В первом случае у keprao есть несколько хороших советов для проверки заголовков. Во втором случае, по сути, нет способа различить запросы, хотя роботы могут быть затруднены с помощью каптчей или аутентификации.

0 голосов
/ 25 сентября 2008

Используйте JavaScript для установки некоторых значений.

0 голосов
/ 25 сентября 2008

Если у вас есть контроль над клиентом, вы можете прикрепить пользовательский заголовок для идентификации отправителя.

Некоторые библиотеки javascript уже делают это при создании запросов XmlHTTP, так что вы можете обрабатывать вызовы Ajax, отличающиеся от стандартных запросов.

Изучите заголовки каждого входящего запроса, чтобы увидеть, есть ли что-нибудь, что вы могли бы использовать.

0 голосов
/ 25 сентября 2008

Хорошо, вы можете посмотреть на строку агента и посмотреть, была ли она из браузера или из вашего клиентского приложения (при условии, что у него есть собственная строка агента)

0 голосов
/ 25 сентября 2008

Не совсем. Вы можете проверить строку агента пользователя, но она может быть установлена ​​вызывающей стороной.

0 голосов
/ 25 сентября 2008

Я думаю, что это невозможно, если сам клиент не взаимодействует (значит, клиент установил некоторый заголовок)

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