[英]Apache LocationMatch wildcard for ModSecurity on wordpress site
我在運行WordPress站點的Ubuntu 14.04 Apache 2.4.7上安裝了mod_security。 我有一些我需要忽略的規則,但是我在實現一些通配符規則時遇到了麻煩,所以我不必指定每一頁。
我所擁有的(在我的site.conf文件中)是......
<LocationMatch "/wp-admin/post.php">
SecRuleRemoveById 300016
</LocationMatch>
<LocationMatch "/wp-admin/nav-menus.php">
SecRuleRemoveById 300016
</LocationMatch>
<LocationMatch "(/wp-admin/|/wp-login.php)">
SecRuleRemoveById 950117
SecRuleRemoveById 950005
SecRuleRemovebyID 981173
SecRuleRemovebyId 960024
</LocationMatch>
<LocationMatch "/wp-admin/load-scripts.php">
SecRuleRemoveById 981173
</LocationMatch>
<LocationMatch "/wp-admin/plugins.php">
SecRuleRemoveById 981173
</LocationMatch>
<LocationMatch "/wp-admin/customize.php">
SecRuleRemoveById 981173
</LocationMatch>
我想要的是將所有內容整合到一個在wp-admin
和wp-login
上使用通配符的規則中。
我嘗試過以下但是因為mod_security拋出了拒絕而似乎被忽略了。
<LocationMatch "(/wp-admin/*|/wp-login/*)">
....
並且
<LocationMatch "(/wp-admin/*)">
....
並且
<Location "/wp-admin/*">
....
我已經對LocationMatch和regex做了一些研究,但我在這里沒有得到什么。 我正在減少做什么?
編輯:modsec_audit.log中的引薦來源網址是http://www.<site>.com/wp-admin/customize.php?theme=modality
雖然Carsten的答案是正確的,但應該注意位置和位置指令在第1階段ModSecurity規則之后運行。 然而,看起來你的規則無論如何都是第二階段,所以在這種情況下這並不特別重要 - 盡管我無法訪問規則300016,因此無法100%確定。
無論如何,由於這個原因,我不喜歡使用Location和LocationMatch,並且個人更喜歡在ModSecurity中使用新規則進行位置過濾,例如:
SecRule REQUEST_URI "@beginsWith /wp-(admin|login)/" \
"phase:2,id:1000,nolog,pass,ctl:ruleRemoveById=300016,\
ctl:ruleRemoveById=950117,\
ctl:ruleRemoveById=950005
...etc.
這樣我可以在規則過濾中保持一致(而不是使用上面的規則過濾第1階段規則,以及通過位置匹配過濾的其他規則)。 但是,每個階段都需要一個規則。 無論如何,正如我所說,如果所有這些都是現在的第2階段或更高規則,那並不重要。
另一個有趣值得記住的是,如果您使用SecRuleRemoveById,則需要在刪除規則后指定此項,而如果使用ctl:ruleRemoveById,則需要在刪除規則之前指定此項。
但是大多數Wordpress攻擊都會針對這些URL。 所以,你要非常肯定的說,你不需要這些規則。 通過轉向更通用的例外情況,您可以將每個規則與超出需要的規則進行匹配。 例如,如果看起來像是從原始設置開始,/ wp-login.php只需要其中4個例外,但是你會將它們全部移動。
我建議,不要放松規則以匹配更多,你應該設法保持緊張, 不要做出這種改變。
事實上,你可以進一步收緊它們,只匹配導致需要異常的某些參數。 例如,如果只有用戶名字段導致您出現問題,那么您可以收緊規則:
<LocationMatch "(/wp-admin/|/wp-login.php)">
SecRuleUpdateTargetById 950117 !ARGS:'username'
SecRuleUpdateTargetById 950005 !ARGS:'username'
SecRuleUpdateTargetById 981173 !ARGS:'username'
SecRuleUpdateTargetById 960024 !ARGS:'username'
</LocationMatch>
或者以其他格式:
SecRule REQUEST_URI "@beginsWith /wp-(admin|login)/" \
"phase:2,id:1000,nolog,pass,\
ctl:ruleRemoveTargetById=950117;ARGS:username,\
ctl:ruleRemoveTargetById=950005;ARGS:username,\
ctl:ruleRemoveTargetById=981173;ARGS:username,\
ctl:ruleRemoveTargetById=960024;ARGS:username
是的,這可能意味着額外的工作,而且我知道你來到這里是為了整合你的規則以使這個更容易,但是如果你最終禁用了許多你想要保護的規則,那么運行類似ModSecurity的WAF沒有什么意義。反對和不幸的是,Wordpress是許多壞人的活躍目標,部分原因在於它的受歡迎程度。
所以,雖然我沒有直接回答你的問題,但我希望這是有用的,讓你有所思考。
這應該工作:
<LocationMatch "/wp-(admin|login)/">
你不需要在這里使用通配符,因為你只想檢測路徑的開頭並且無關緊要,在第二個斜杠后面會發生什么。
對於Location
,您需要~
來觸發正則表達式解釋:
<Location ~ "/wp-(admin|login)/">
更多細節:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.