2018年5月12日 星期六

解決tomcat上 X-Frame-Option及X-XSS-Protection未設定的問題

最近剛上了一個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-classinit-param>  
       <param-name>antiClickJackingOption</param-name>  
       <param-value>SAMEORIGIN</param-value>  
   </init-paramasync-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-valueSAMEORIGIN</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

沒有留言:

張貼留言