У меня есть сайт, на котором включена modsecurity, но я получаю 403 Forbidden
при попытке доступа к PDF-документам на сервере через веб-сайт. Есть ли способ внести PDF-файлы в белый список, которые разрешено обслуживать через сайт, или возможный вариант конфигурации?
--9a349c55-A--
[14/Aug/2013:10:05:57 --0400] UguOxX8AAQEAAD22d8AAAACN 192.168.1.108 52929 192.168.1.125 80
--9a349c55-B--
GET /pdf/sample.pdf HTTP/1.1
Host: www.example.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36
Accept: */*
Referer: http://www.example.com/pdf/sample.pdf
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Cookie: __utma=143856170.1892623529.1376158518.1376158518.1376158518.1; __utmz=143856170.1376158518.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utma=1.834637782.1376487927.1376487927.1376487927.1; __utmb=1.4.10.1376487927; __utmc=1; __utmz=1.1376487927.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)
Range: bytes=0-32767
--9a349c55-F--
HTTP/1.1 403 Forbidden
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 247
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1
--9a349c55-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 /pdf/sample.pdf
on this server.</p>
</body></html>
--9a349c55-H--
Message: Access denied with code 403 (phase 2). String match "bytes=0-" at REQUEST_HEADERS:Range. [file "/etc/apache2/modsecurity-crs/base_rules/modsecurity_crs_20_protocol_violations.conf"] [line "248"] [id "958291"] [rev "2.2.5"] [msg "Range: field exists and begins with 0."] [data "bytes=0-32767"] [severity "NOTICE"] [tag "RULE_MATURITY/5"] [tag "RULE_ACCURACY/7"] [tag "https://www.owasp.org/index.php/ModSecurity_CRS_RuleID-958291"] [tag "PROTOCOL_VIOLATION/INVALID_HREQ"] [tag "http://www.bad-behavior.ioerror.us/documentation/how-it-works/"]
Action: Intercepted (phase 2)
Apache-Handler: proxy-server
Stopwatch: 1376489157340781 711 (- - -)
Stopwatch2: 1376489157340781 711; combined=247, p1=176, p2=30, p3=0, p4=0, p5=40, sr=31, sw=1, l=0, gc=0
Response-Body-Transformed: Dechunked
Producer: ModSecurity for Apache/2.6.3 (http://www.modsecurity.org/); OWASP_CRS/2.2.5; OWASP_CRS/2.2.5.
Server: Apache
--9a349c55-Z--
используйте REQUEST_URI для создания правила с регулярными выражениями и поместите его в соответствующее место в файле / файлах конфигурации, например
SecRule REQUEST_URI ".*\.pdf$" phase:1,allow
Здесь нелегко объяснить безопасный способ сделать это, это зависит от вашей архитектуры и того, как настроена ваша modsecurity.
Похоже, что запрос заблокирован правилом 958291, которое предполагает, что ни один законный браузер не установит заголовок «Диапазон», начинающийся с «0-» (что, на мой взгляд, является явно неправильным предположением - Firefox делает это все время для любого большого файла. скачивает - но это уже другая тема).
Вместо того, чтобы слепо разрешать любой запрос любого PDF-запроса без дополнительных проверок безопасности (как это было предложено GioMac выше), я бы предложил просто отключить это конкретное правило для PDF-файлов:
SecRule REQUEST_URI ".*\.pdf\?$" "phase:1,id:1001,nolog,t:urlDecode,t:lowercase,t:normalizePath,ctl:ruleRemoveById=958291"
Вы также можете сделать то же самое для MP4, WEBM и других больших двоичных файлов, которые могут быть доступны для загрузки на вашем веб-сайте:
SecRule REQUEST_URI ".*\.(mp4|webm|pdf)\?$" "phase:1,id:1001,nolog,t:urlDecode,t:lowercase,t:normalizePath,ctl:ruleRemoveById=958291"