Настройка HTTP
Обзор опций конфигурации для Nette HTTP.
Если вы используете не весь фреймворк, а только эту библиотеку, прочитайте, как загрузить конфигурацию.
HTTP-заголовки
http:
# заголовки, которые отправляются с каждым запросом
headers:
X-Powered-By: MyCMS
X-Content-Type-Options: nosniff
X-XSS-Protection: '1; mode=block'
# affects header X-Frame-Options
frames: ... # (string|bool) defaults to 'SAMEORIGIN'
В целях безопасности фреймворк отправляет заголовок
X-Frame-Options: SAMEORIGIN
, в котором говорится, что страница может быть
отображена внутри другой страницы (в элементе <iframe>
) только в
том случае, если она находится на том же домене. Это может быть
нежелательно в некоторых ситуациях (например, если вы разрабатываете
приложение для Facebook), поэтому поведение можно изменить, установив
фреймы frames: http://allowed-host.com
.
Политика безопасности контента
Заголовки Content-Security-Policy
(далее CSP) могут быть легко собраны, их
описание можно найти в описании CSP.
Директивы CSP (такие как script-src
) могут быть записаны либо как
строки в соответствии со спецификацией, либо как массивы значений для
лучшей читабельности. Тогда нет необходимости писать кавычки вокруг
ключевых слов, таких как 'self'
. Nette также автоматически генерирует
значение nonce
, поэтому 'nonce-y4PopTLM=='
будет отправлен в
заголовке.
http:
# Content Security Policy
csp:
# строка в соответствии со спецификацией CSP
default-src: "'self' https://example.com"
# массив значений
script-src:
- nonce
- strict-dynamic
- self
- https://example.com
# bool в случае переключателей
upgrade-insecure-requests: true
block-all-mixed-content: false
Используйте <script n:nonce>...</script>
в шаблонах, и значение nonce
будет заполнено автоматически. Создавать защищенные веб-сайты в Nette
очень просто.
Аналогичным образом можно добавить заголовки
Content-Security-Policy-Report-Only
(который можно использовать параллельно с
CSP) и Feature Policy:
http:
# Content Security Policy Report-Only
cspReportOnly:
default-src: self
report-uri: 'https://my-report-uri-endpoint'
# Feature Policy
featurePolicy:
unsized-media: none
geolocation:
- self
- https://example.com
HTTP Cookie
Вы можете изменить значения по умолчанию некоторых параметров методов Nette\Http\Response::setCookie() и session.
http:
# область применения cookie по пути
cookiePath: ... # (строка) по умолчанию '/'
# каким хостам разрешено получать куки
cookieDomain: 'example.com' # (строка|домен) по умолчанию unset
# отправлять куки только через HTTPS?
cookieSecure: ... # (bool|auto) по умолчанию auto
# отключает отправку куки, которые Nette использует в качестве защиты от CSRF
disableNetteCookie: ... # (bool) по умолчанию false
Параметр cookieDomain
определяет, какие домены (origin) могут принимать
куки. Если он не указан, то cookie принимается тем же (под)доменом, который
им задан, исключая их поддомены. Если указан cookieDomain
, то
субдомены также будут включены. Поэтому указание cookieDomain
является менее ограничительным, чем опущение.
Например, если задан cookieDomain: nette.org
, то cookie также доступен на
всех поддоменах, таких как doc.nette.org
. Этого также можно достичь с
помощью специального значения domain
, т.е. cookieDomain: domain
.
Значение по умолчанию cookieSecure
равно auto
, что означает,
что если сайт работает на HTTPS, cookie будут отправляться с флагом
Secure
и, следовательно, будут доступны только через HTTPS.
HTTP-прокси
Если сайт работает за HTTP-прокси, введите IP-адрес прокси, чтобы
обнаружение HTTPS-соединений работало правильно, а также IP-адрес клиента.
То есть, чтобы Nette\Http\Request::getRemoteAddress() и isSecured() возвращали правильные
значения и в шаблонах генерировались ссылки с протоколом https:
.
http:
# IP-адрес, диапазон (т.е. 127.0.0.1/8) или массив этих значений
proxy: 127.0.0.1 # (string|string[]) по умолчанию none
Сессия
Основные настройки сеансов:
session:
# показывает панель сеанса в панели трейси?
debugger: ... # (bool) по умолчанию false
# время бездействия, по истечении которого сессия завершается
expiration: 14 days # (string) по умолчанию '3 часа'
# когда начинать сессию?
autoStart: ... # (smart|always|never) по умолчанию 'smart'
# обработчик, служба, реализующая интерфейс SessionHandlerInterface
handler: @handlerService
Параметр autoStart
определяет, когда начинать сеанс. Значение
always
означает, что сессия всегда запускается при запуске
приложения. Значение smart
означает, что сессия будет запускаться
при запуске приложения, только если она уже существует, или в тот
момент, когда мы хотим читать из нее или писать в нее. Наконец, значение
never
отключает автоматический запуск сессии.
Вы также можете задать все директивы PHP сессии (в формате camelCase), а также readAndClose. Пример:
session:
# 'session.name' written as 'name'
name: MYID
# 'session.save_path' written as 'savePath'
savePath: "%tempDir%/sessions"
Сессионный файл cookie
Сессионный cookie отправляется с теми же параметрами, что и другие cookie, но вы можете изменить их для него:
session:
# каким хостам разрешено получать cookie-файл
cookieDomain: 'example.com' # (string|domain)
# ограничения при доступе к кросс-оригинальному запросу
cookieSamesite: None # (Strict|Lax|None) defaults to Lax
Параметр cookieSamesite
влияет на то, отправляется ли cookie при межсайтовых запросах, что
обеспечивает некоторую защиту от атак Cross-Site Request Forgery.
Услуги DI
Эти сервисы добавляются в контейнер DI:
Имя | Тип | Описание |
---|---|---|
http.request |
Nette\Http\Request | HTTP request |
http.response |
Nette\Http\Response | HTTP response |
session.session |
Nette\Http\Session | Управление сеансами |