Запрос, в котором отсутствует заголовок Агента пользователя
Я активировал ModSecurity
на дешевом веб-хостинге, но я не могу его контролировать: то есть единственное, что позволяет вам делать поставщик услуг, - это читать журналы, но, к сожалению, вы не можете настроить ModSecurity
самостоятельно.
Сегодня утром я нашел этот журнал:
[Sun Sep 16 16:50:31 2018]
[error]
[client 214.250.181.113] ModSecurity: Access denied with code 403 (phase 2). Operator EQ matched 0 at REQUEST_HEADERS.
[file "/usr/local/apache2/conf/modsecurity/base_rules/modsecurity_crs_21_protocol_anomalies.conf"]
[line "65"]
[id "960009"]
[rev "2.1.1"]
[msg "Request Missing a User Agent Header"]
[severity "NOTICE"]
[tag "PROTOCOL_VIOLATION/MISSING_HEADER_UA"]
[tag "WASCTC/WASC-21"]
[tag "OWASP_TOP_10/A7"]
[tag "PCI/6.5.10"]
[hostname "www.example.com"]
[uri "/firepro/newfile.txt"]
Я проверил, что это происходит, когда мой код PHP
просто пытается прочитать и повторить содержимое newfile.txt используя file_get_contents
. Эта ошибка ломает виджет Wordpress и делает его бесполезным (это не отображать любой контент, так как контент предоставляется текстовым файлом, перезаписываемым каждый час PHP с помощью cronjob).
Какой заголовок ожидает ModSecurity
? Зачем мне нужно указывать заголовок Агента пользователя?
1 answers
Я проверил, что это происходит, когда мой PHP-код просто пытается прочитать и повторить содержимое
newfile.txt
с помощьюfile_get_contents
.
Похоже, что вы запрашиваете newfile.txt
по HTTP вместо того, чтобы делать прямой запрос в файловой системе. Если вы используете протокол HTTP, то PHP делает совершенно отдельный HTTP-запрос, используя значение user_agent
в php.ini
, которое по умолчанию равно нулю. (Вы можете установить это в своем сценарии с помощью вызова типа ini_set('user_agent','my-user-agent')
).
Однако, если этот файл находится на вашем локальная файловая система, то вместо этого вы должны выполнить вызов локальной файловой системы, используя абсолютный путь к файловой системе. Например:
file_get_contents($_SERVER['DOCUMENT_ROOT'].'/path/to/newfile.txt');
Какой заголовок ожидает ModSecurity?
Любой запрос от реального конечного пользователя должен иметь непустой заголовок User-Agent
, следовательно, правило, установленное ModSecurity. (Однако заголовок User-Agent
не является строго необходимым для допустимого HTTP-запроса.)