spring - Spring 获取请求被拒绝,因为 URL 包含潜在的恶意字符串“;”
问题描述
我正在将 spring SAML 与 IDP 集成。从应用程序(SP)重定向到 IDP 登录屏幕时,IDP 正在附加 jsessionid 并在浏览器中获取以下异常。第一次从应用程序页面重定向到 IDP 登录页面时出现以下异常,但第二次如果我输入应用程序 url,它将成功重定向到 idp 登录页面。
没有得到什么问题,对于低于异常的其他 IDP,我没有得到,但是对于自定义编写的特定 IDP,我第一次得到异常。任何事情都需要从 SP 或 IDP 方面进行更改。
以下是从 SP 重定向到 IDP 登录页面时出现的异常。( Note: example.com is IDP domain
)
解决方案
Spring Security 的默认行为是拒绝 URL 中带有分号的请求,因为这是执行反射文件下载攻击的常用方法。JSESSIONID
不应该在路径中,因为它可能导致泄漏,相反,您可以为此使用 cookie 。
StrictHttpFirewall的Spring Security 文档解释了这种行为。
确定 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());
}
推荐阅读
- laravel - 调度 laravel 命令
- c++ - Qt Creator 错误:找不到 -lopencv_imgcodecs
- java - 如何从 apache http 客户端响应中删除服务器/软件信息
- xml - XSLT:基于子节点属性的排序不起作用
- python - 组合由重叠的低部分和高部分组成的数字
- javascript - 从下拉列表中选择多个选中的值,并在这些值旁边显示一个文本框
- mysql - 仅选择 JOIN 语句中的最后一条记录
- php - PHP:数组格式化
- android - RxSearchView 不支持 androidx SearchView?
- handlebars.js - 如何设置 {{#each }} 来自助手的迭代值