Как разрешить определенную страницу реферера в сервлете?

У меня есть HTML-страница:

<form method="post" action="Servlet" name="frm">
    Enter your name: <input type="text" name="name" id="name" /><br/>
    <input type="submit" name="sub" value="Submit" />
</form>

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


person kidsoul    schedule 16.08.2014    source источник
comment
Ваш вопрос не ясен   -  person SpringLearner    schedule 16.08.2014
comment
так что я должен сказать?   -  person kidsoul    schedule 16.08.2014
comment
owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)   -  person Quentin    schedule 16.08.2014
comment
я отредактировал. пожалуйста, помогите мне!   -  person kidsoul    schedule 16.08.2014


Ответы (1)


Есть так много способов добиться этого

Способ 1:

Поместите следующий код в sevrlet

if(new URI(request.getHeader("referer")).getPath()=="static html url")
{ 
  //allow
}
else
{
  //redirect to some other page
}

Способ 2:

  1. Когда пользователи входят в систему в первый раз, сгенерируйте случайный токен и сохраните его в переменной сеанса.
  2. Когда вы загружаете эту конкретную html-страницу, передайте переменную сеанса как строку запроса.
  3. Когда вы отправляете форму в сервлет, отправьте это значение вместе с другими значениями.
  4. Сравните значения из сеанса и значения, полученные через публикацию, если оба равны, разрешите в противном случае перенести страницу на выход из системы или на другую страницу/
person Rakesh patanga    schedule 16.08.2014
comment
Я пробую ваш ПУТЬ 1. Я создаю две страницы: demo.html и demo1.jsp с одинаковой структурой. Затем попробуйте каждую страницу для сервлета, но, похоже, он не работает. Результат всегда переходит на p2.html i1265.photobucket.com/albums/jj507/ mabonblog/1_zpsfabe8c37.png - person kidsoul; 16.08.2014
comment
@kidsoul сначала напечатайте то, что вы получите для следующих двух страниц, новый URI(request.getHeader(referer)).getPath() и жестко закодируйте то, что вы получите для html-страницы в сравнении - person Rakesh patanga; 17.08.2014
comment
еще один момент, если страница реферера https, то вы не получите информацию о реферере - person Shravan; 29.08.2014