【问题标题】:Spring getting The request was rejected because the URL contained a potentially malicious String ";"Spring 获取请求被拒绝,因为 URL 包含潜在的恶意字符串“;”
【发布时间】:2021-08-10 15:54:29
【问题描述】:

我正在将 spring SAML 与 IDP 集成。从应用程序 (SP) 重定向到 IDP 登录屏幕时,IDP 正在附加 jsessionid 并在浏览器中获取以下异常。第一次从应用程序页面重定向到 IDP 登录页面时出现以下异常,但第二次如果我输入应用程序 url,它将成功重定向到 idp 登录页面。

没有得到什么问题,对于低于异常的其他 IDP,我没有得到,但是对于自定义编写的特定 IDP,我第一次得到异常。需要从 SP 或 IDP 方面进行任何更改。

以下是从 SP 重定向到 IDP 登录页面时出现的异常。(Note: example.com is IDP domain)

【问题讨论】:

    标签: spring security spring-security


    【解决方案1】:

    Spring Security 的默认行为是拒绝 URL 中带有分号的请求,因为这是执行Reflected File Download Attacks 的常用方式。 JSESSIONID 不应该在路径中,因为它可能导致泄漏,相反,您可以使用 cookie。

    StrictHttpFirewall 的Spring Security documentation 解释了这种行为。

    确定 URL 中是否允许使用分号(即矩阵变量)。默认情况下禁用此行为,因为它是尝试执行反射文件下载攻击的常用方法。它也是许多绕过基于 URL 的安全性的漏洞的来源。

    如果您希望允许使用分号,请重新考虑,因为它是一种非常常见的安全绕过来源。下面列出了用户需要分号和替代项的几个常见原因:

    在路径中包含 JSESSIONID - 您不应在 URL 中包含会话 ID(或任何敏感信息),因为它可能导致泄漏。而是使用 Cookie。 矩阵变量 - 想要利用矩阵变量的用户应考虑改用 HTTP 参数。

    请注意,您仍然可以通过使用您自定义的 StrictHttpFirewall 实例来禁用此行为,但请重新考虑,因为它是一种非常常见的安全绕过来源。

    @Bean
    public HttpFirewall allowSemicolonHttpFirewall() {
        StrictHttpFirewall firewall = new StrictHttpFirewall();
        firewall.setAllowSemicolon(true);
        return firewall;
    }
    
    @Override
    public void configure(WebSecurity web) throws Exception {
      super.configure(web);
      web.httpFirewall(allowSemicolonHttpFirewall());
    }
    

    【讨论】:

      猜你喜欢
      • 2019-03-05
      • 2022-10-23
      • 2021-11-17
      • 2019-03-27
      • 2019-07-28
      • 1970-01-01
      • 2018-07-05
      • 2018-08-24
      • 2018-11-30
      相关资源
      最近更新 更多