Длина заголовка при настройке Content Security Policy

12
L
На сайте с 10.11.2013
Offline
45
4020

Сайт на vps, операционная система Debian 6.0 Настроен Content-Security-Policy.

Параметры ограничивающие длину заголовка вроде бы не установлены (смотрел nginx.conf и apache2.conf), поэтому по умолчанию длина заголовка равна 8190 bytes. Возникла необходимость увеличить это значение до 16380, так как лимит достигнут, и возникает ошибка 500 Internal Server Error.

Первым делом в nginx.conf добавил строки:

client_header_buffer_size 4k;

large_client_header_buffers 8 16k;

Перезагрузил сервер, но ошибка осталась.

Тогда в apache2.conf добавил строки:

LimitRequestLine 16380

LimitRequestFieldSize 16380

Перезагрузил сервер, но ошибка также осталась.

Может быть кто-нибудь сможет подсказать в чем может быть дело? Может быть еще какого-нибудь параметра не хватает? Спасибо!

iHead
На сайте с 25.04.2008
Offline
137
#1

Смотрите лог ошибок nginx или Apache (в зависимости от того, чью страницу ошибки видите).

Рекомендуемый хостинг партнер 1С-Битрикс (https://www.ihead.ru/bitrix/), PHP-хостинг (https://www.ihead.ru/php/), доверенный партнер RU-CENTER (https://www.ihead.ru/news/573.html), официальный представитель REG.RU в Кирове (https://www.ihead.ru/news/851.html)
L
На сайте с 10.11.2013
Offline
45
#2

На странице "500 Internal Server Error" указано, что ошибку выдает apache. Можно ли этому доверять?

В apache2.conf сменил LogLevel на debug. Затем перезагрузил сервер, воспроизвел ошибку. Однако в логе /var/log/apache2/error.log только записи [notice] и [info]. Т.e ничего критического не зафиксировано.

Тогда я решил в apache2.conf указать в LimitRequestLine и LimitRequestFieldSize значения в два раза меньше дефолтного, т.е. 4096 По идее после перезагрузки сервера, сайт не должен был даже запуститься и сразу выдать 500 ошибку, ведь заголовок Header set Content-Security-Policy практически в два раза больше нового значения.

Но сайт заработал. Получается apache вообще не реагирует на записи LimitRequestLine и LimitRequestFieldSize, однако реагирует на изменение уровня логирования, т.к. начал показывать записи уровня [debug]. Записи сделаны в глобальную область.

iHead
На сайте с 25.04.2008
Offline
137
#3

Директивы

LimitRequestLine

LimitRequestFieldSize

имеют отношение к заголовкам запроса, а не к заголовкам ответа.

Если я правильно понял, у вас проблема при установке длинного заголовка через mod_headers?

Судя по исходному коду httpd-2.4.28:

Макс длина строки в .htaccess - 8192 байт.

Вы можете обойти проблему, установив заголовок через httpd.conf, там максимальная длина строки - 16*1024*1024 байт.

Документация подтверждает эти цифры

https://httpd.apache.org/docs/2.4/configuring.html

L
На сайте с 10.11.2013
Offline
45
#4

Да, у меня проблема из-за длинного заголовка в <IfModule mod_headers.c> записанного в .htaccess

Для начала попробую разделить строку в .htaccess символом "\".

Если не получится, попробую установить заголовок через httpd.conf

Этот файл имеет такой же синтаксис, что и .htaccess? Достаточно просто добавить следующую запись?

<IfModule mod_headers.c>

Header set Content-Security-Policy "default-src 'self' ..."

</IfModule>

iHead
На сайте с 25.04.2008
Offline
137
#5
lobol:
Да, у меня проблема из-за длинного заголовка в <IfModule mod_headers.c> записанного в .htaccess
Для начала попробую разделить строку в .htaccess символом "\".
Если не получится, попробую установить заголовок через httpd.conf
Этот файл имеет такой же синтаксис, что и .htaccess? Достаточно просто добавить следующую запись?

<IfModule mod_headers.c>
Header set Content-Security-Policy "default-src 'self' ..."
</IfModule>

Разделение строк символом "\" не поможет.

Синтаксис httpd.conf почти тот же.

Возможно, вам нужно не в самом httpd.conf добавить строку, а в конкретном VirtualHost (если используется).

LEOnidUKG
На сайте с 25.11.2006
Offline
1722
#6

Уж лучше передать в index.php этот заголовок. Проблем не будет.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
L
На сайте с 10.11.2013
Offline
45
#7

Попробовал добавить заголовок в apache2.conf:

Header set Content-Security-Policy "default-src 'self' ..."

Заголовок передался без проблем. А вот когда я увеличил длину строки больше 8192 байт, то появилась ошибка. На этот раз ошибку 502 вызывал nginx, хотя в конфиге nginx были выставлены следующие параметры

client_header_buffer_size 4k;

large_client_header_buffers 8 16k;

Уровень логирования был crit, и ошибок в логе зафиксировано не было.

LEOnidUKG
На сайте с 25.11.2006
Offline
1722
#8
На этот раз ошибку 502 вызывал nginx,

Нет, 502 ошибка это опять же апатч не ответил, а nginx передал, что апатч молчит.

iHead
На сайте с 25.04.2008
Offline
137
#9

На 502 ошибку в error_log nginx будет сообщение. Вы где-то не там смотрите или процесс nginx не может писать в нужный файл.

Попробуйте сделать в nginx

proxy_buffer_size 64k;

proxy_buffers 8 64k;

E
На сайте с 09.07.2017
Offline
2
#10
lobol:
Попробовал добавить заголовок в apache2.conf:

Header set Content-Security-Policy "default-src 'self' ..."

Заголовок передался без проблем. А вот когда я увеличил длину строки больше 8192 байт, то появилась ошибка. На этот раз ошибку 502 вызывал nginx,

Смотрите лог апача, он или не ответил, или послал некорректный ответ. Предположу, что он просто не запустился после изменений в конфигурационном файле. Если актуально, проверьте apachectl -T

Сайт на vps, операционная система Debian 6.0
Судя по исходному коду httpd-2.4.28

Учитывая ОС, предположу, что апач там все же 2.2. Думаю, что тс все же не собирал руками более новую версию, а поставил ту, что есть в репах.

А если апач 2.2, то согласно все той же документации, получается, что уже не только .htaccess ограничивается 8192 символами, но и сам конфигурационный файл апача - https://httpd.apache.org/docs/2.2/configuring.html . И соответственно от переноса директив из .htaccess в httpd.conf, ничего не меняется, ибо лимиты там одни. Думаю это и есть причина вашей 502-ой, перенесли строку из .htaccess-а в конфиг, и апач просто не запустился, ругаясь на эту директиву.

Вероятно, я что-то упускаю, но уточните, пожалуйста, почему просто не передавать этот заголовок через nginx, при помощи того же "add_header"? На первый взгляд, это самое простое и вменяемое решение в данном случае.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий