Mod-Security

使用 ModSecurity 和 lua 腳本阻止請求

  • August 10, 2016

我有網路流量流經 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"

有關更多詳細資訊,請參見此處blockhttps ://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#block

引用自:https://serverfault.com/questions/795126