Налаштування 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
.
Політика безпеки контенту
Заголовки Content-Security-Policy
(далі CSP) можуть бути легко зібрані, їх
опис можна знайти в описі CSP. Директиви CSP
(такі як script-src
) можуть бути записані або як рядки відповідно до
специфікації, або як масиви значень для кращої читабельності. Тоді
немає необхідності писати лапки навколо ключових слів, таких як
'self'
. Nette також автоматично генерує значення nonce
, тому
'nonce-y4PopTLM=='
буде надіслано в заголовку.
http:
# Політика безпеки контенту
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'
# Політика можливостей
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.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' записано як 'name'
name: MYID
# 'session.save_path' записано як 'savePath'
savePath: "%tempDir%/sessions"
Сесійний файл cookie
Сесійний cookie надсилається з тими самими параметрами, що й інші cookie, але ви можете змінити їх для нього:
session:
# яким хостам дозволено отримувати cookie-файл
cookieDomain: 'example.com' # (string|domain)
# обмеження при доступі до крос-оригінального запиту
cookieSamesite: None # (Strict|Lax|None) за замовчуванням Lax
Параметр cookieSamesite
впливає на те, чи надсилається cookie під час міжсайтових запитів, що
забезпечує деякий захист від атак Cross-Site Request Forgery.
Послуги з проведення розслідувань
Ці сервіси додаються до контейнера ІР:
Назва | Тип | Опис |
---|---|---|
http.request |
Nette\Http\Request | HTTP-запит |
http.response |
Nette\Http\Response | HTTP-відповідь |
session.session |
Nette\Http\Session | управління сесіями |