在我的 JSP 网络应用程序中,我想验证用户是否来 self 的特定页面,http://myapplication.com/foo.jsp
。在进行检查的页面上,我可以这样做:
String ref = request.getHeader("referer");
然后比较ref
和http://myapplication.com/foo.jsp
但是,这种验证很容易被欺骗。还有哪些其他技术可以验证客户端是否来自预期的 URL?
我想这以前在 SO 中出现过。 谢谢
公关
最佳答案
让第一个 JSP 的预处理 servlet 生成一个唯一的 token 。
String token = UUID.randomUUID().toString();
将其存储在 session 中
session.setAttribute("token", token);
将其作为表单的隐藏输入值传递
<input type="hidden" name="token" value="${token}" />
或者当你使用链接而不是表单时作为链接的请求参数
<a href="second.jsp?token=${token}">link</a>
让第二个 JSP 的预处理 servlet 与 session 中的比较
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>>
作为 token (使用 URI 作为键, token 作为值)。
关于java - JSP 验证用户来自上一页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5326949/