The request was rejected because the URL contained a potentially malicious String “;“問題的正確解決姿勢
問題的復(fù)盤
首先這個問題出現(xiàn)的時機是,當(dāng)用戶訪問特定的連接(如http://localhost/index
)時沒有權(quán)限,被重定向到登錄頁面http://localhost/login
。為了登錄成功后再跳轉(zhuǎn)到目標(biāo)訪問的頁面http://localhost/index
,Spring Security會在Cookie中存一個信息,標(biāo)記一為一個jsessionid
。重定向時Servlet容器,也就是tomcat之類的會把jsessionid
編碼到重定向url,也就是http://localhost/login;jsessionid=xxxxxxxxxx
。這種請求會被Spring Security的StrictHttpFirewall
攔截,引發(fā)進而The request was rejected because the URL contained a potentially malicious String ";"
錯誤。
安全策略
OWASP指出在URL中暴露jsessionid
是非常危險的舉動,可能導(dǎo)致會話固定攻擊,因此不建議上述的行為。
解決方案
目前有兩種解決方案。
允許url攜帶jsessionid
這種在網(wǎng)上很多,如果瀏覽器的cookie被禁用或者你的應(yīng)用可以容忍上述安全漏洞你可以在Spring Security中采取這種方式:
httpSecurity
.sessionManagement()
.enableSessionUrlRewriting(true);
這種不建議使用。
修改servlet容器的會話機制
在 Spring Boot 中配置 Tomcat 的跟蹤模式:
server.servlet.session.tracking-modes=cookie
作者:碼農(nóng)小胖哥
歡迎關(guān)注:碼農(nóng)小胖哥