spring获取请求被拒绝,因为url包含潜在的恶意字符串“

nbysray5  于 2021-10-10  发布在  Java
关注(0)|答案(1)|浏览(475)

我正在将spring saml与idp集成。当从应用程序(sp)重定向到idp登录屏幕时,idp正在附加jsessionid并在浏览器中获得以下异常。第一次从应用程序页面重定向到idp登录页面时,我收到以下异常,但第二次如果我输入应用程序url,它将成功重定向到idp登录页面。
没有得到问题是什么,对于以下异常的其他idp,我没有得到,但是对于自定义编写的特定idp,我第一次得到异常。sp或idp侧需要更改任何内容。
下面是从sp重定向到idp登录页面时得到的异常( Note: example.com is IDP domain )

dz6r00yl

dz6r00yl1#

spring security的默认行为是在url中使用分号拒绝请求,因为这是执行反射文件下载攻击的常见方式。这个 JSESSIONID 不应该在路径中,因为它可能导致泄漏,相反,您可以使用cookies。
stricthttpfirewall的spring安全文档解释了这种行为。
确定url中是否允许使用分号(即矩阵变量)。默认设置是禁用此行为,因为这是尝试执行反射文件下载攻击的常见方式。它也是许多绕过基于url的安全性的漏洞的来源。
如果您希望允许分号,请重新考虑,因为它是一种非常常见的安全绕过源。下面列出了用户需要分号和可选分号的几个常见原因:
在路径中包含jsessionid-您不应该在url中包含会话id(或任何敏感信息),因为这可能导致泄漏。取而代之的是使用cookies。矩阵变量-想要利用矩阵变量的用户应该考虑使用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());
}

相关问题