代码之家  ›  专栏  ›  技术社区  ›  Neeraj Sharma

如何修复java中的开放重定向问题

  •  2
  • Neeraj Sharma  · 技术社区  · 9 年前

    目前我的java代码使用

    response.sendRedirect(request.getRequestUrl().toString());
    

    我必须解决这个问题,但我不能白名单,因为有太多的网址与之相关。

    我用ESAPI尝试了以下解决方案,但它对我不起作用。

    ESAPI.httpUtilities().setCurrentHTTP(req, resp);
    ESAPI.httpUtilities().sendRedirect(location);
    ESAPI.httpUtilities().clearCurrent();
    

    3 回复  |  直到 9 年前
        1
  •  1
  •   avgvstvs    9 年前

    我是ESAPI项目的联合负责人。

    我必须解决这个问题,但我不能白名单,因为有太多

    从本质上说,“我必须解决这个问题,但我把自己限制在最简单的解决方案之外。”

    Here are the best practices enumerated by @jww:

    1. 简单地避免使用重定向和转发。

    2. 如果无法避免用户输入,请确保提供的值有效、适用于应用程序并为用户授权。

    3. 建议将任何此类目标输入映射到一个值,而不是实际的URL或URL的一部分,并且服务器端代码将此值转换为目标URL。

    4. 强制所有重定向首先通过一个页面,通知用户他们将离开您的网站,并让他们单击一个链接进行确认。

    这些线路:

     ESAPI.httpUtilities().setCurrentHTTP(req, resp);
     ESAPI.httpUtilities().sendRedirect(location);
     ESAPI.httpUtilities().clearCurrent();
    

    不要工作,因为在执行重定向之前必须检查用户输入。

        2
  •  1
  •   Kevin W. Wall    9 年前

    你肯定会希望根据域名将其列入白名单,至少是最低限度。尽可能地限制它。E、 例如,如果你的应用程序托管在 https://myApp.example.com/ 重定向到站点上的任何位置是 可以(我可能会这样写,因为如果它可以作为绕过授权检查的一种方式,比如在多序列页面系列上,那么它可能不好。但只要你的定期授权检查能够检查并验证重定向,你通常就可以了。)但是重定向到 https://anotherApp.example.com/

    -凯文

        3
  •  0
  •   Neeraj Sharma    9 年前

    谢谢你的建议和评论。

    ESAPI.httpUtilities().setCurrentHTTP(req, resp);
    ESAPI.httpUtilities().sendRedirect(location);
    ESAPI.httpUtilities().clearCurrent();