Modsecurity 阻止访问 WSDL

Modsecurity 阻止访问 WSDL

我已安装mod_securityOWASP 规则集,现在它阻止我使用 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"

答案1

您可以关闭该目录的 mod_security

使用以下方式修改您的 vhost

<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

答案2

什么对您有意义取决于您的要求。如果您非常确信它不需要任何额外的保护,那么告诉 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"

不确定这是否适用于你的情况,但这是一种尽可能保持保护的替代方案。HTH

相关内容