java - JSP 验证用户来自上一页

标签 java http jsp reference spoofing

在我的 JSP 网络应用程序中,我想验证用户是否来 self 的特定页面,http://myapplication.com/foo.jsp。在进行检查的页面上,我可以这样做:

String ref = request.getHeader("referer");

然后比较refhttp://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/

相关文章:

java - 如何在java中的rest url中传递从和到日期的列表

regex - 尝试在同一个端口设置域和子域。 (NGINX)

java - 无法在/WEB-INF/urlrewrite.xml 找到 urlrewrite conf 文件

Java,如何在纯java中使用表达式语言

Java - 可以将方法分配给数组吗?

java - 尝试用另一个子字符串替换字符串的子字符串

java - 如何等待 "Minus"按键输入

c# - 如何使用 PHP 加密字符串将 CSharp/.NET 设为 "play nice"?

perl - 为什么我的 .zip 文件在 HTTP 文件上传后损坏了?

java - 在 Spring 中使用 Thymeleaf 代替 JSP 有什么优势?