Запрос, в котором отсутствует заголовок Агента пользователя


Я активировал 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? Зачем мне нужно указывать заголовок Агента пользователя?

Author: MrWhite, 2018-09-17

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-запроса.)

 2
Author: MrWhite, 2018-09-17 11:38:53