Modsecurity, предотвращающий доступ к WSDL

Я установил 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"

2 ответа

Решение

Вы можете отключить 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

Что имеет смысл для вас, будет зависеть от ваших требований. Указание 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"

Не уверен, относится ли это к вашему случаю, но это альтернатива, которая поддерживает защиту как можно точнее. НТН

Другие вопросы по тегам