簡體   English   中英

WordPress網站上的ModSecurity的Apache LocationMatch通配符

[英]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-adminwp-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM