различить HTTP-запрос, отправленный от формы HTML, и HTTP-запрос, отправленный от пользователя - PullRequest
0 голосов
/ 04 марта 2009

Я написал java-код для информации, отправляемой и получаемой для сервера в байтах. Проблема заключается в том, как отличить HTTP-запрос, отправленный от HTML-формы, и HTTP-запрос, отправленный от пользователя. мы пытаемся использовать ссылку в заголовках HTTP, но для первого запроса реферер равен нулю. следовательно, этот вариант невозможен. Есть ли другой API / другой подход? Пожалуйста, дайте мне знать с примером кода ... Спасибо, Ps

Ответы [ 4 ]

3 голосов
/ 04 марта 2009

Теперь я понимаю проблему лучше. Простой ответ - нет. Чем сложнее ответ, тем лучше всего сделать обоснованное предположение.

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

Далее, если тип запроса - POST, а тип mime - «application / x-www-form-urlencoded» или «multipart / form-data», то обычно это отправка формы, то есть пользователь нажал кнопку «Отправить». или аналогичный. ( 2 )

(обычно) пользователи, использующие браузер, не могут напрямую отправлять запросы POST.

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

0 голосов
/ 04 марта 2009

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

0 голосов
/ 04 марта 2009

Если это по соображениям безопасности, то это невозможно. Все, что браузер отправляет вам, также может быть отправлено пользователем.

Но неясно, что вы подразумеваете под отправкой пользователем.

0 голосов
/ 04 марта 2009

Вот алгоритм на высоком уровне:

  1. При создании формы HTML сгенерируйте случайное число / String / GUID и вставьте его в форму в качестве скрытого ввода. Сохраните это случайное значение на стороне сервера (в контексте приложения, в LinkedHashMap, чтобы вы могли установить максимальный размер / MRU-кэш , в каком-то виде кеш-решение и т. Д.)
  2. При обработке запроса формы проверьте наличие этого случайного токена.
    • Если запрос содержит случайный токен, то source = HTML form
    • Остальное, source = human

Вы также можете установить куки при отправке оригинальной HTML-формы, проверить их наличие на обратной передаче; поместить некоторые данные в объект Session и т.д .; это все варианты одной и той же идеи.

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