Mod-Security

Modsecurity 防止訪問 WSDL

  • April 19, 2017

我已經安裝mod_security了 OWASP 規則集,它現在阻止了我使用 WSDL 呼叫 Web 服務的能力。當我的程式碼嘗試進行 Web 服務呼叫時,我在 mod sec 審核日誌中看到以下內容(域、IP 和文件名已被隱藏以進行保護)。wsdl 文件駐留在我的本地伺服器上,所以我的問題是:有沒有辦法只允許這個 WSDL 或類似的東西?我真的不想完全禁用 mod_security。

謝謝!

--76a2f126-A--
[05/Aug/2014:02:57:12 +0000] U@BICH8AAAEAAAkVDPwAAAAH x.x.x.x 45488 x.x.x.x 443
--76a2f126-B--
GET /WebService.wsdl HTTP/1.1
Host: demo.example.com
Connection: close

--76a2f126-F--
HTTP/1.1 403 Forbidden
Content-Length: 333
Connection: close
Content-Type: text/html; charset=iso-8859-1

--76a2f126-E--
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /WebService.wsdl
on this server.</p>
<p>Additionally, a 404 Not Found
error was encountered while trying to use an ErrorDocument to handle the request.</p>
</body></html>

--76a2f126-H--
Message: Access denied with code 403 (phase 2). Operator EQ matched 0 at REQUEST_HEADERS. [file "/etc/httpd/modsecurity-crs/base_rules/modsecurity_crs_21_protocol_anomalies.conf"] [line "47"] [id "960015"] [rev "1"] [msg "Request Missing an Accept Header"] [severity "NOTICE"] [ver "OWASP_CRS/2.2.9"] [maturity "9"] [accuracy "9"] [tag "OWASP_CRS/PROTOCOL_VIOLATION/MISSING_HEADER_ACCEPT"] [tag "WASCTC/WASC-21"] [tag "OWASP_TOP_10/A7"] [tag "PCI/6.5.10"]
Stopwatch: 1407207432020557 41964 (- - -)
Stopwatch2: 1407207432020557 41964; combined=190, p1=116, p2=44, p3=0, p4=0, p5=30, sr=28, sw=0, l=0, gc=0
Response-Body-Transformed: Dechunked
Producer: ModSecurity for Apache/2.8.0 (http://www.modsecurity.org/); OWASP_CRS/2.2.9.
Server: Apache
Engine-Mode: "ENABLED"

您可以關閉該目錄的 mod_security

修改你的虛擬主機

<Directory /path/to/dir>
 SecRuleEngine Off
</Directory>

您還可以通過將其添加到 modsec conf 文件中來將您的 IP 列入白名單

SecRule REMOTE_ADDR "^XX.XX.XX.XX" phase:1,nolog,allow,id:999999999,ctl:ruleEngine=off

什麼對你有意義取決於你的要求。如果您非常確信它不需要任何額外的保護,告訴 ModSecurity 根本不驗證該目錄可以為您節省一些計算週期,並且對於靜態文件上的 GET,這可能很好。在我的例子中,WSDL(和其他東西)是動態的,我在嘗試呼叫服務時遇到了同樣的規則違規,但我想為服務呼叫保留 ModSecurity,所以我選擇了另一種方式。為我觸發的規則原來是由於客戶端(即 WCF)沒有提供所有標準的 HTTP 標頭,並且由於它不會在正常使用中提供它們,所以我繼續並壓制了那些規則(特別是接受和使用者代理標頭的要求),如下所示:

SecRule REQUEST_URI "@beginsWith /path/to/service" "id:ruleidhere,t:none,nolog,pass, \
 ctl:ruleRemoveByTag=OWASP_CRS/PROTOCOL_VIOLATION/MISSING_HEADER_ACCEPT, \
 ctl:ruleRemoveByTag=OWASP_CRS/PROTOCOL_VIOLATION/MISSING_HEADER_UA"

不確定這是否適用於您的情況,但這是一種使保護盡可能完好的替代方法。高溫高壓

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