Mod-Security
使用 ModSecurity 和 lua 腳本阻止請求
我有網路流量流經 ModSecurity。
在 ModSecurity 配置中,我正在呼叫一個 Lua 腳本,該腳本正在對請求字元串的參數進行一些簡單的分析。具體來說,它正在檢查跨站點腳本的證據,如果存在某些證據,它將阻止傳入流量。
ModSecurity規則引擎配置如下:
SecRuleEngine On SecRuleScript "/path/to/lua/script/detectXSS.lua" "block"
lua 腳本的說明性範例如下:
function main() -- Retrieve script parameters local d = m.getvars("ARGS", { "lowercase", "htmlEntityDecode" } ); -- Loop through the parameters for i = 1, #d do -- Examine parameter value. if (string.find(d[i].value, "<script")) then return ("Suspected XSS in variable " .. d[i].name .. "."); end end -- Nothing wrong found. return nil; end
雖然 XSS 可以被檢測到並返回,但是阻塞功能並沒有發生。有什麼明顯的缺失嗎?任何幫助將不勝感激。
乾杯
儘管您可能認為
block
實際上並沒有阻止請求。你需要使用deny
它。這樣做的原因
block
是一個特殊定義的操作,然後您可以定義如何處理。當您的規則被阻止時,您可以拒絕、僅記錄或重定向到錯誤頁面。這是使用 SecDefaultAction 設置的,預設設置是通過如下所示的規則:https ://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#SecDefaultAction 。雖然這似乎沒有意義,但它還允許您在 OWASP CRS 中輕鬆地打開或關閉異常評分等操作。因此,要麼將您的 SecRuleScipt 更改為,
deny
而不是block
:SecRuleEngine On SecRuleScript "/path/to/lua/script/detectXSS.lua" "deny"
或者將預設
block
操作設置為拒絕:SecRuleEngine On SecDefaultAction "phase:2,deny" SecRuleScript "/path/to/lua/script/detectXSS.lua" "block"
有關更多詳細資訊,請參見此處
block
: https ://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#block