簡(jiǎn)述:
JAVAWaf采用Java預(yù)言編寫(xiě),主要針對(duì)Web應(yīng)用,以filter的形式存在,配置靈活,實(shí)際根據(jù)需求進(jìn)行相關(guān)設(shè)置。
web.xml:
<filter> <filter-name>websecfilter</filter-name> <filter-class>com.hs.security.web.filter.WatchDog</filter-class> <init-param> <param-name>config</param-name> <param-value>/javawaf.xml</param-value> </init-param> </filter> <filter-mApping> <filter-name>websecfilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
注:javawaf.xml和web.xml為平行目錄
javawaf.xml:
- 1最簡(jiǎn)配置:
<? xml version="1.0" encoding="UTF-8" ?> <javawaf> <logger> 作者:jkgh006 日期:2016/08/22 新增:添加三條輸入攔截規(guī)則,分別為XSS,SQLinjection,SSRF,添加三條輸出攔截規(guī)則,SQLinjection,malware,URLRedirection 刪除: 更新: </logger> <encoding>UTF-8</encoding> <intercept> <input-intercept>true</input-intercept> <output-intercept>true</output-intercept> </intercept> </javawaf>
注:其中l(wèi)ogger不需要關(guān)心,這個(gè)是編寫(xiě)插件的更新日志,供調(diào)試用,intercept標(biāo)簽是一個(gè)攔截開(kāi)關(guān),例如,input-intercept為true那么就會(huì)進(jìn)行輸入攔截,對(duì)所有的post,get參數(shù)進(jìn)行攔截。output-intercept為true,那么就會(huì)對(duì)輸出進(jìn)行攔截,這里主要攔截的就是響應(yīng)頁(yè)面的內(nèi)容,兩個(gè)都為false的話(huà),就是都不攔截
- 2特權(quán)配置(黑白名單)
<privilege> <input> <include></include> <exclude></exclude> </input> <output> <include></include> <exclude></exclude> </output> </privilege>
注:這里也是采用輸入輸出配置,默認(rèn)情況下攔截檢測(cè)所有請(qǐng)求,include和exclude標(biāo)簽的默認(rèn)屬性就是path,表示以path的形式進(jìn)行判斷是否要走攔截邏輯,這里還有其他屬性
url , path , query , domain , retcode
舉例:
<include type="domain"></include>
特權(quán)配置的原則:
a. 白名單優(yōu)先
舉例說(shuō)明:
<input> <include>/hello</include> //需要走攔截邏輯的 <exclude></exclude> //不需要走攔截邏輯的 </input>
如果配置了include 那么配置exclude 是自動(dòng)失效,配置這條規(guī)則的意思就是說(shuō)以u(píng)ri的形式對(duì)象為/hellok開(kāi)頭的就進(jìn)入輸入攔截邏輯
b. 輸入配置全局生效,輸出配置局部生效
舉例說(shuō)明:
<input> <include>/hello</include> //需要走攔截邏輯的 <exclude></exclude> //不需要走攔截邏輯的 </input> <output> <include></include> <exclude type="retcode">302</exclude> </output>
這樣配置的意思就是,以u(píng)ri的形式對(duì)象為/hellok開(kāi)頭的就進(jìn)入輸入攔截邏輯,并且在返回的時(shí)候,響應(yīng)碼為非302的請(qǐng)求進(jìn)響應(yīng)攔截
上面的也可以簡(jiǎn)化為:
<input> <include>/hello</include> //需要走攔截邏輯的 </input> <output> <exclude type="retcode">302</exclude> </output>
- 3關(guān)鍵字配置
<keywords> <input-words>information_schema|extractvalue</input-words> <output-words></output-words> </keywords>
也分為輸入輸出攔截,輸入攔截的是參數(shù),輸出攔截的是響應(yīng)內(nèi)容,優(yōu)先級(jí)比較高
- 4全局?jǐn)r截回調(diào)
<callback> <input-class> com.callback.test.GloubeCallBackTest </input-class> <output-class>com.callback.test.GloubeCallBackTest</output-class> </callback>
分為輸入攔截后回調(diào),和輸出攔截后回調(diào),這里主要是針對(duì)用戶(hù)自定義設(shè)置而來(lái)的
- 5規(guī)則詳細(xì)配置
<policys> <input> </input> <output> </output> </policys>
這里面分別為對(duì)輸入的攔截配置和對(duì)輸出的攔截配置,舉例子如下:
Input標(biāo)簽內(nèi):
注:id為要調(diào)用規(guī)則的編號(hào),這個(gè)是必須項(xiàng),name為自定義的規(guī)則名稱(chēng),會(huì)覆蓋系統(tǒng)默認(rèn)名稱(chēng)
include%20和%20exclude%20分別為只針對(duì)這條策略的黑白名單;callback也是只針對(duì)這條策略的用戶(hù)自定義hook類(lèi),這里主要說(shuō)一下custom-rules:
用戶(hù)自定義規(guī)則:
replace優(yōu)先級(jí)別最高,如果設(shè)置了,就會(huì)完全取代系統(tǒng)的所有規(guī)則,append規(guī)則級(jí)別相對(duì)比較低,配置了之后默認(rèn)加到要檢查的規(guī)則后面
output標(biāo)簽內(nèi):
配置與input一樣
私信回復(fù)學(xué)習(xí)免費(fèi)領(lǐng)取最新學(xué)習(xí)資料