java - 如何在 Java 中使用具有 session 失效的 Tomcat CSRF 保护过滤器

标签 java session tomcat

我已阅读 Tomcat CSRF 保护文件程序文档,据我了解,入口点必须是不执行安全功能的页面。

我明白,在使用时,任何入口点都是当前 session 中随机数的一部分。

然而,根据 OWASP 前 10 条建议,我在用户登录并生成新 session 时使 session 无效。

我发现的问题是,完成此操作后,如果用户单击仅在登录后可用的链接,例如更改密码,这不构成入口点的一部分,则会返回 403,因为新 session 。

如果用户先点击其中一个入口点 url,他们可以点击更改密码链接并访问该页面,因为已经创建了一个新的 nonce,更改密码链接将被覆盖,但是如果欢迎页面有用户需要使用的其他链接,他们不能使用后退按钮并单击链接,因为随机数不相同。

我的问题是如何处理这样一个事实,即当创建新 session 时,如果不首先单击其中一个入口点 url,将无法访问更改密码页面。

我已经查看了对 url 的编码,但可能我的代码没有编写来正确处理这个问题,而且我正在使用 JSTL,因为它的转义属性有助于防止 XSS,而且我似乎无法找到一种方法来用这个编码 url。

谁能提供一些建议或选项作为最好的做法。

如果有帮助的话,我将包括我的 Controller servlet 的登录部分,它是通过登录表单发布方法到达的。

public class UserController extends HttpServlet {
final static Logger log = LogManager.getLogger(UserController.class);
@Override
public void doPost(HttpServletRequest request,
    HttpServletResponse response)
    throws IOException, ServletException {
String requestURI = request.getRequestURI();
String url = "";
// Register a new user
if (requestURI.endsWith("/subscribeToSite")) {
    url = subscribeToSite(request, response);
}
// Login
if(requestURI.endsWith("/logInToSite")){
    url = logInToSite(request, response);
}
  //try to  login
User user = UserDB.loginUser(mPNum, upwd);
if(user==null){
    url = "/loginerror.jsp";
}else{
       HttpSession session = request.getSession();
       session.invalidate();
       session=request.getSession(true);
       session.setAttribute("loggedUsrID", user.getUserID());
       session.setAttribute("loggedUsrFName", user.getFName());
       url="/schedule/welcome.jsp";
}      
return url;
}//EO user login

最佳答案

OK 通过在登录时使 session 无效来解决此问题。然后从另一个只能通过登录页面访问的页面创建 token 。

关于java - 如何在 Java 中使用具有 session 失效的 Tomcat CSRF 保护过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47106387/

相关文章:

java - 如何在 Android API 2.2 及更高版本中使用 Renderscript?

java - 如何查找字符串中的一组单词?

php - SSL 和 session 劫持/固定

angularjs - 如何在Tomcat 9的rewrite.config文件中为多个angular项目添加多个重写规则

java - 在 OSX 10.7.2 上设置 R 和 Java 应用程序

java - Java中如何控制资源的缓存?

java - 按钮监听器中的随机面板颜色仅有效一次

java - Servlet 编码重定向URL

python - 如何使用 Pyramid 和烧杯的 cookie session 来正确存储 session_id?

jakarta-ee - 使用 Tomcat 代理配置 OpenAM