在我的JSP webapp中,我想验证用户来自我的特定页面http://myapplication.com/foo.jsp
。在进行检查的页面上,我可以这样做:
String ref = request.getHeader("referer");
然后将ref
与http://myapplication.com/foo.jsp
但是,这种验证很容易被欺骗。有哪些其他技术可以验证客户端是否来自预期的URL?
我想这是在SO之前出现过的。 谢谢
PR
答案 0 :(得分:1)
让第一个JSP的预处理servlet生成一个唯一的标记。
String token = UUID.randomUUID().toString();
将其存储在会话中
session.setAttribute("token", token);
将其作为表单
的隐藏输入值传递<input type="hidden" name="token" value="${token}" />
或当您使用链接而不是表单
时作为链接的请求参数<a href="second.jsp?token=${token}">link</a>
让第二个JSP的预处理servlet将它与会话中的那个进行比较
String token = (String) session.getAttribute("token");
session.removeAttribute("token");
if (token != null && token.equals(request.getParameter("token"))) {
// Valid, continue requesst.
} else {
// Invalid, block request.
}
这是假定单个页面到页面对话的基本概念。要覆盖多个浏览器页面/标签页,您可以使用Set<String>
或Map<String, Set<String>>
作为标记(使用URI作为键和标记作为值)。
答案 1 :(得分:0)
真正确保的唯一方法是在会话中存储“访问过的最后一页”。这样它就不会传输到客户端,或者可能被请求的负责人欺骗。
这个想法是在返回的jsp中,它更新当前会话中的“最后访问页面”属性。然后在页面的早期处理中,检查“最后一个 页面访问“属性。
当然,除非将它们配置为共享会话信息,否则这在Web服务器之间不起作用。