Конфігурація 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
cookies доступні також на всіх
піддоменах, таких як doc.nette.org
. Того ж можна досягти також за
допомогою спеціального значення domain
, тобто
cookieDomain: domain
.
Стандартне значення auto
для атрибута cookieSecure
означає, що
якщо сайт працює на HTTPS, cookies будуть надсилатися з прапором 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 | керування сесіями |