公司最近的一個安全產品要拿銷售許可證,管理界面是基於B/S做的,本來在公司悠閒地敲着代碼,突然測試人員發了一份英文的web漏洞掃描報告過來,大致長這個樣子的:
然後就百度這個logo acunetix
一家做安全產品的公司,我就栽在這上面了。
然後有一箇中危漏洞:
這個當時就看不懂了,查了下CSRF,俗稱跨站點請求僞造。我在想,我都沒登錄進去,怎麼僞造啊,後來在csdn裏查了半天,查到了有跟我一樣經歷的人,還是個妹子,她寫了很多,就是把我搜索到的所有方法都試過了,全寫進去了,內容有點多,我就拿了有用的部分寫了這篇文章,妹子寫的文章路徑(記一次蛋疼的tomcat、shiro自動生成的JESSIONID去除歷程..........)。
漏洞存在原因: 登錄url後面暴露了JESSIONID,得想辦法去掉
首先我的項目是基於springboot 2 + shiro 1.4.0 這兩個版本的
在項目配置文件application.properties修改tomcat屬性
server:
servlet:
session:
tracking-modes: cookie
cookie:
http-only: true
然後在shiro配置文件中添加sessionManager 這個bean
/**
* shiro session的管理
*/
@Bean
public DefaultWebSessionManager sessionManager() {
DefaultWebSessionManager defaultWebSessionManager = new DefaultWebSessionManager();
defaultWebSessionManager.setGlobalSessionTimeout(60 * 30 * 1000);
defaultWebSessionManager.setDeleteInvalidSessions(true);
defaultWebSessionManager.setSessionValidationSchedulerEnabled(true);
defaultWebSessionManager.setSessionIdCookieEnabled(true);
// tomcat的JESSIONID自動生成模塊
defaultWebSessionManager.setSessionIdUrlRewritingEnabled(false);
return defaultWebSessionManager;
}
然後就解決了!