1. 程式人生 > 其它 >[openRASP] sql注入校驗失敗的原因與分析

[openRASP] sql注入校驗失敗的原因與分析

由於公司安排需要整合openRASP,花了些功夫終於集成了,但是測試的時候發現sql注入的例子某些時候無法被正確攔截到,因此花了一週時間研究一下具體原因。

下面是rasp執行sql校驗的大致流程圖:

  但是該流程有一個較為嚴重的 "瑕疵" ,就是 "安全校驗"這一步。 安全校驗是: java程式碼 --> c++語言 --> JS外掛執行校驗 , 這樣的3種語言混合的,並且,在c++程式碼中內建了一個執行緒池用來執行JS。

  如果當執行緒池內滿了就放入佇列裡等待執行,但是如果從佇列取出的任務超過了超時時間timeout,則不會繼續執行,因此可能導致有安全隱患的SQL語句沒有進行過校驗後直接退出了,而 "沒有進行過校驗的SQL語句" 與 "校驗通過的SQL" 的返回值一樣都是Null , 而外層的java程式碼就將其 “誤認為校驗通過", 然後將該請求放入LRU快取。

  所以,當下一次同樣的SQL語句進入校驗流程時,則會命中LRU快取後不執行校驗。

  該問題不只是影響sql的校驗,所有型別校驗都存在。所以,到github上給rasp官方提出了issues , 也附上了臨時解決方案 :https://github.com/baidu/openrasp/issues/322