Spring获取请求被拒绝,因为URL包含潜在的恶意字符串“quot;”&引用;

Spring获取请求被拒绝,因为URL包含潜在的恶意字符串“quot;”&引用;,spring,security,spring-security,Spring,Security,Spring Security,我正在将spring SAML与IDP集成。当从应用程序(SP)重定向到IDP登录屏幕时,IDP正在附加jsessionid并在浏览器中获得以下异常。第一次从应用程序页面重定向到IDP登录页面时,我收到以下异常,但第二次如果我输入应用程序url,它将成功重定向到IDP登录页面 没有得到问题是什么,对于以下异常的其他IDP,我没有得到,但是对于自定义编写的特定IDP,我第一次得到异常。SP或IDP侧需要更改任何内容 以下是从SP重定向到IDP登录页面时发生的异常情况。(注意:example.com

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

没有得到问题是什么,对于以下异常的其他IDP,我没有得到,但是对于自定义编写的特定IDP,我第一次得到异常。SP或IDP侧需要更改任何内容

以下是从SP重定向到IDP登录页面时发生的异常情况。(
注意:example.com是IDP域

Spring Security的默认行为是在URL中使用分号拒绝请求,因为这是一种常见的执行方式。
JSESSIONID
不应该在路径中,因为它可能导致泄漏,相反,您可以使用cookies进行泄漏

StrictHttpFirewall解释了这种行为

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

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

在路径中包含JSESSIONID-您不应该在URL中包含会话id(或任何敏感信息),因为这可能导致泄漏。取而代之的是使用Cookies。 矩阵变量-想要利用矩阵变量的用户应该考虑使用HTTP参数。 请注意,您仍然可以通过使用自定义的
StrictHttpFirewall
实例禁用此行为,但请重新考虑,因为这是一个非常常见的安全绕过源

@Bean
公共HttpFirewall allowSemicolonHttpFirewall(){
StrictHttpFirewall=新的StrictHttpFirewall();
防火墙.setAllowSemicolon(true);
返回防火墙;
}
@凌驾
public void configure(WebSecurity web)引发异常{
super.configure(web);
httpFirewall(allowSemicolonHttpFirewall());
}

Spring Security的默认行为是在URL中使用分号拒绝请求,因为这是一种常见的执行方式。
JSESSIONID
不应该在路径中,因为它可能导致泄漏,相反,您可以使用cookies进行泄漏

StrictHttpFirewall解释了这种行为

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

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

在路径中包含JSESSIONID-您不应该在URL中包含会话id(或任何敏感信息),因为这可能导致泄漏。取而代之的是使用Cookies。 矩阵变量-想要利用矩阵变量的用户应该考虑使用HTTP参数。 请注意,您仍然可以通过使用自定义的
StrictHttpFirewall
实例禁用此行为,但请重新考虑,因为这是一个非常常见的安全绕过源

@Bean
公共HttpFirewall allowSemicolonHttpFirewall(){
StrictHttpFirewall=新的StrictHttpFirewall();
防火墙.setAllowSemicolon(true);
返回防火墙;
}
@凌驾
public void configure(WebSecurity web)引发异常{
super.configure(web);
httpFirewall(allowSemicolonHttpFirewall());
}