Я установил mod_security
с набором правил OWASP, и теперь он блокирует мою возможность вызывать веб-службу с помощью WSDL. Когда мой код пытается выполнить вызов веб-службы, я вижу следующее в журнале аудита 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"
Что имеет смысл для вас, будет зависеть от ваших требований. Указание ModSecurity вообще не проверять этот каталог может сэкономить вам несколько вычислительных циклов, если вы уверены, что он не требует дополнительной защиты, и для GET в статическом файле это, вероятно, нормально. В моем случае WSDL (и другие вещи) являются динамическими, и я столкнулся с теми же нарушениями правил при попытке вызвать службу, но хотел сохранить ModSecurity на месте для вызовов службы, поэтому я пошел другим путем. Правила, которые были запущены для меня, оказались связаны с тем, что клиент (который был WCF) не предоставлял все стандартные заголовки HTTP, и, поскольку он не предоставлял их при нормальном использовании, я пошел дальше и подавил только те правила (в частности, требования к заголовкам accept и user agent), например:
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
Вы можете отключить mod_security для этого каталога
Измените свой vhost с помощью
<Directory /path/to/dir>
SecRuleEngine Off
</Directory>
Вы также можете добавить свой IP в белый список, добавив его в файл конфигурации modsec.
SecRule REMOTE_ADDR "^XX.XX.XX.XX" phase:1,nolog,allow,id:999999999,ctl:ruleEngine=off