server.xml文件
firewall標籤用來定義防火牆;firewall下whitehost標籤用來定義 IP白名單 ,blacklist用來定義 SQL黑名單。python
<firewall> <whitehost> <host user="mycat" host="127.0.0.1"></host> #ip 白名單 用戶對應的能夠訪問的 ip 地址 </whitehost> <blacklist check="true"> <property name="selelctAllow">false</property> #黑名單容許的 權限 後面爲默認 </blacklist> </firewall>
黑名單攔截明細配置mysql
配置項 | 缺省值 | 描述 |
selelctAllow | true | 是否容許執行 SELECT 語句 |
selectAllColumnAllow | true | 是否容許執行 SELECT * FROM T 這樣的語句。若是設置爲 false,不容許執行 select * from t,但能夠select * from (select id, name from t) a。這個選項是防護程序經過調用 select * 得到數據表的結構信息。 |
selectIntoAllow | true | SELECT 查詢中是否容許 INTO 字句 |
deleteAllow | true | 是否容許執行 DELETE 語句 |
updateAllow | true | 是否容許執行 UPDATE 語句 |
insertAllow | true | 是否容許執行 INSERT 語句 |
replaceAllow | true | 是否容許執行 REPLACE 語句 |
mergeAllow | true | 是否容許執行 MERGE 語句,這個只在 Oracle 中有用 |
callAllow | true | 是否容許經過 jdbc 的 call 語法調用存儲過程 |
setAllow | true | 是否容許使用 SET 語法 |
truncateAllow | true | truncate 語句是危險,缺省打開,若須要自行關閉 |
createTableAllow | true | 是否容許建立表 |
alterTableAllow | true | 是否容許執行 Alter Table 語句 |
dropTableAllow | true | 是否容許修改表 |
commentAllow | false | 是否容許語句中存在註釋,Oracle 的用戶不用擔憂,Wall 可以識別 hints和註釋的區別 |
noneBaseStatementAllow | false | 是否容許非以上基本語句的其餘語句,缺省關閉,經過這個選項就可以屏蔽 DDL。 |
multiStatementAllow | false | 是否容許一次執行多條語句,缺省關閉 |
useAllow | true | 是否容許執行 mysql 的 use 語句,缺省打開 |
describeAllow | true | 是否容許執行 mysql 的 describe 語句,缺省打開 |
showAllow | true | 是否容許執行 mysql 的 show 語句,缺省打開 |
commitAllow | true | 是否容許執行 commit 操做 |
rollbackAllow | true | 是否容許執行 roll back 操做 |
##若是把 selectIntoAllow、deleteAllow、updateAllow、insertAllow、mergeAllow 都設置爲 false,這就是一個只讀數據源了。## | ||
攔截配置-永真條件 | ||
selectWhereAlwayTrueCheck | true | 檢查 SELECT 語句的 WHERE 子句是不是一個永真條件 |
selectHavingAlwayTrueCheck | true | 檢查 SELECT 語句的 HAVING 子句是不是一個永真條件 |
deleteWhereAlwayTrueCheck | true | 檢查 DELETE 語句的 WHERE 子句是不是一個永真條件 |
deleteWhereNoneCheck | false | 檢查 DELETE 語句是否無 where 條件,這是有風險的,但不是 SQL 注入類型的風險 |
updateWhereAlayTrueCheck | true | 檢查 UPDATE 語句的 WHERE 子句是不是一個永真條件 |
updateWhereNoneCheck | false | 檢查 UPDATE 語句是否無 where 條件,這是有風險的,但不是SQL 注入類型的風險 |
conditionAndAlwayTrueAllow | false | 檢查查詢條件(WHERE/HAVING 子句)中是否包含 AND 永真條件 |
conditionAndAlwayFalseAllow | false | 檢查查詢條件(WHERE/HAVING 子句)中是否包含 AND 永假條件 |
conditionLikeTrueAllow | true | 檢查查詢條件(WHERE/HAVING 子句)中是否包含 LIKE 永真條件 |
其餘攔截配置 | ||
selectIntoOutfileAllow | false | SELECT ... INTO OUTFILE 是否容許,這個是 mysql 注入攻擊的常見手段,缺省是禁止的 |
selectUnionCheck | true | 檢測 SELECT UNION |
selectMinusCheck | true | 檢測 SELECT MINUS |
selectExceptCheck | true | 檢測 SELECT EXCEPT |
selectIntersectCheck | true | 檢測 SELECT INTERSECT |
mustParameterized | false | 是否必須參數化,若是爲 True,則不容許相似 WHERE ID = 1 這種不參數化的 SQL |
strictSyntaxCheck | true | 是否進行嚴格的語法檢測,Druid SQL Parser 在某些場景不能覆蓋全部的SQL 語法,出現解析 SQL 出錯,能夠臨時把這個選項設置爲 false,同時把 SQL 反饋給 Druid 的開發者。 |
conditionOpXorAllow | false | 查詢條件中是否容許有 XOR 條件。XOR 不經常使用,很難判斷永真或者永假,缺省不容許。 |
conditionOpBitwseAllow | true | 查詢條件中是否容許有"&"、"~"、"|"、"^"運算符。 |
conditionDoubleConstAllow | false | 查詢條件中是否容許連續兩個常量運算表達式 |
minusAllow | true | 是否容許 SELECT * FROM A MINUS SELECT * FROM B 這樣的語句 |
intersectAllow | true | 是否容許 SELECT * FROM A INTERSECT SELECT * FROM B 這樣的語句 |
constArithmeticAllow | true | 攔截常量運算的條件,好比說 WHERE FID = 3 - 1,其中"3 - 1"是常量運算表達式。 |
limitZeroAllow | false | 是否容許 limit 0 這樣的語句 |
禁用對象檢測配置 | ||
tableCheck | true | 檢測是否使用了禁用的表 |
schemaCheck | true | 檢測是否使用了禁用的 Schema |
functionCheck | true | 檢測是否使用了禁用的函數 |
objectCheck | true | 檢測是否使用了「禁用對對象」 |
variantCheck | true | 檢測是否使用了「禁用的變量」 |
readOnlyTables | 空 | 指定的表只讀,不可以在 SELECT INTO、DELETE、UPDATE、INSERT、MERGE 中做爲"被修改表"出現 |