druid sql黑名單 報異常 sql injection violation, part alway true condition not allow


最近使用druid,發現阿里這個連接池 真的很好用,可以監控到連接池活躍連接數 開辟到多少個連接數 關閉了多少個,對於我在項目中查看錯誤 問題,很有幫助,

但是最近發現里面 有條sql語句 被攔截了,在sql黑名單里,程序拋出異常

sql injection violation, part alway true condition not allow

sql 語句大概如下 HIbernate 組合出來的sql

SELECT this_.id AS id34_0_, this_.accountno AS accountno34_0_, this_.amount AS amount34_0_, this_.bankcard AS bankcard34_0_, this_.bankname AS bankname34_0_
FROM lhu.bankinfo this_
WHERE this_.type=? AND this_.isshow=? AND this_.useable=? AND this_.bankname=? AND this_.userrole LIKE ? AND 1=1 ORDER BY RAND()

 

百度查了一下,大概解決方法就是在配置文件中  

將屬性<property name="filters" value="config,stat,wall,log4j" />改成<property name="filters" value="config,stat,log4j" />

去掉 wall, 官方解析(監控統計用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall) , 這樣問題確實解決,放druid不去過濾掃描這些語句。

 

那之前那個sql語句涉及sql注入問題,又對sql注入進一步了解了一下:

最后發現, ORDER BY RAND(),這句有很大的問題, ORDER BY RAND() 隨機抽取的意思, 數據在執行會多次掃描表數據,這在數據量小的時候是可以做到隨機抽取,

從來滿足業務需要,但是數據量大的時候,反而會影響查詢的效率,而且查詢時間也比較長,sql語句中rand() 做隨機數,也被列為禁區,

可能也是這個原因,druid認為這個語句是一個不安全的語句,從而過濾掉,類似的語句還有想sys_guid() 等都會去掃描整個表數據, 也會被攔截,

后續再出現sql被攔截再更新上來

 

個人觀點,

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM