Конфигурация HTTP
Обзор опций конфигурации для Nette HTTP.
Если вы не используете весь фреймворк, а только эту библиотеку, прочитайте, как загрузить конфигурацию.
HTTP-заголовки
http:
# заголовки, которые отправляются с каждым запросом
headers:
X-Powered-By: MyCMS
X-Content-Type-Options: nosniff
X-XSS-Protection: '1; mode=block'
# влияет на заголовок X-Frame-Options
frames: ... # (string|bool) по умолчанию 'SAMEORIGIN'
Фреймворк из соображений безопасности отправляет заголовок
X-Frame-Options: SAMEORIGIN
, который говорит, что страницу можно отображать
внутри другой страницы (в элементе <iframe>
) только если она
находится на том же домене. Это может быть нежелательно в некоторых
ситуациях (например, если вы разрабатываете приложение для Facebook),
поэтому поведение можно изменить, установив frames: http://allowed-host.com
или frames: true
.
Content Security Policy
Легко можно составить заголовки 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() и сессии.
http:
# область действия cookie по пути
cookiePath: ... # (string) по умолчанию '/'
# домены, которые принимают cookie
cookieDomain: 'example.com' # (string|domain) по умолчанию не установлено
# отправлять cookie только через HTTPS?
cookieSecure: ... # (bool|auto) по умолчанию auto
# отключает отправку cookie, которую использует Nette как защиту от CSRF
disableNetteCookie: ... # (bool) по умолчанию false
Атрибут cookieDomain
определяет, какие домены могут принимать cookie.
Если он не указан, cookie принимает тот же (суб)домен, который его
установил, но не его субдомены. Если cookieDomain
указан,
субдомены также включаются. Поэтому указание cookieDomain
менее
ограничивающее, чем его отсутствие.
Например, при cookieDomain: nette.org
cookie доступны и на всех субдоменах,
таких как doc.nette.org
. Того же можно достичь также с помощью
специального значения domain
, то есть cookieDomain: domain
.
Значение по умолчанию auto
у атрибута cookieSecure
означает,
что если сайт работает по 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[]) по умолчанию не установлено
Сессия
Базовые настройки сессий:
session:
# отображать панель сессии в Tracy Bar?
debugger: ... # (bool) по умолчанию false
# время неактивности, после которого сессия истечет
expiration: 14 days # (string) по умолчанию '3 hours'
# когда должна запускаться сессия?
autoStart: ... # (smart|always|never) по умолчанию 'smart'
# обработчик, сервис, реализующий интерфейс SessionHandlerInterface
handler: @handlerService
Опция autoStart
управляет тем, когда должна запускаться сессия.
Значение always
означает, что сессия запустится всегда при запуске
приложения. Значение smart
означает, что сессия запустится при
старте приложения только тогда, когда она уже существует, или в момент,
когда мы хотим из нее читать или в нее записывать. И наконец, значение
never
запрещает автоматический запуск сессии.
Далее можно настраивать все PHP директивы сессии (в формате camelCase) и также readAndClose. Пример:
session:
# 'session.name' запишем как 'name'
name: MYID
# 'session.save_path' запишем как 'savePath'
savePath: "%tempDir%/sessions"
Session cookie
Session cookie отправляется с теми же параметрами, что и другие cookie, но эти вы можете для нее изменить:
session:
# домены, которые принимают cookie
cookieDomain: 'example.com' # (string|domain)
# ограничение при доступе с другого домена
cookieSamesite: None # (Strict|Lax|None) по умолчанию Lax
Атрибут cookieSamesite
влияет на то, будет ли cookie отправлена при доступе с другого домена, что
обеспечивает определенную защиту от атак Cross-Site Request Forgery (CSRF).
Сервисы DI
Эти сервисы добавляются в DI-контейнер:
Имя | Тип | Описание |
---|---|---|
http.request |
Nette\Http\Request | HTTP-запрос |
http.response |
Nette\Http\Response | HTTP-ответ |
session.session |
Nette\Http\Session | управление сессией |