最近剛上了一個JSP開發的系統,部署在tomcat 8.5上,被本機關滲透測試團隊發現兩項表頭未設定,被列為中風險,分別是「X-Frame-Options」及「X-XSS-Protection」,如果在IIS,這很好處理,只要在「HTTP回應標頭」裡加兩項設定就可以解決。但從網路上找到的tomcat上解決方案大多要自己寫filter,其實tomcat自7.0.63版以後,也可以透過web.xml來設定,只要在web.xml加入:
<filter> <filter-name>httpheadersecurity</filter-name> <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class><init-param> <param-name>antiClickJackingOption</param-name> <param-value>SAMEORIGIN</param-value> </init-param><async-supported>true</async-supported> </filter>
<filter-mapping> <filter-name>httpHeaderSecurity</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> </filter-mapping>
當啟用 httpHeaderSecurity 的filter後,預設是將X-Frame-Options=DENY加到回應標頭,但因我的系統需要用iframe內嵌同一網站的頁面,所以要自己加:
<init-param> <param-name>antiClickJackingOption</param-name> <param-value>SAMEORIGIN</param-value> </init-param>
才能將X-Frame-Options的值改成SAMEORIGIN,要注意哦!param-nmae是用antiClickJackingOption(注意大小寫),不是X-Frame-Options。
不過httpHeaderSecurity只能設定幾種標頭,不像IIS的「HTTP回應標頭」可以隨便設,如果你想要設定任意標頭,只好自己寫filter,這裡提供個鏈結供參:
https://stackoverflow.com/questions/38195273/how-to-set-x-frame-option-in-tomcat
沒有留言:
張貼留言