HTTP конфигурация
Преглед на опциите за конфигурация за Nette HTTP.
Ако не използвате целия framework, а само тази библиотека, прочетете как да заредите конфигурацията.
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'
Framework-ът по съображения за сигурност изпраща хедъра
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 бисквитки
Могат да се променят стойностите по подразбиране на някои параметри на метода Nette\Http\Response::setCookie() и сесията.
http:
# обхват на бисквитката според пътя
cookiePath: ... # (string) по подразбиране е '/'
# домейни, които приемат бисквитката
cookieDomain: 'example.com' # (string|domain) по подразбиране не е зададено
# изпращане на бисквитка само през HTTPS?
cookieSecure: ... # (bool|auto) по подразбиране е auto
# изключва изпращането на бисквитка, която Nette използва за защита срещу CSRF
disableNetteCookie: ... # (bool) по подразбиране е false
Атрибутът cookieDomain
определя кои домейни могат да приемат
бисквитката. Ако не е посочен, бисквитката се приема от същия
(под)домейн, който я е задал, но не и от неговите поддомейни. Ако
cookieDomain
е зададен, са включени и поддомейните. Затова
посочването на cookieDomain
е по-малко ограничаващо от
пропускането му.
Например при cookieDomain: nette.org
бисквитките са достъпни и на всички
поддомейни като doc.nette.org
. Същото може да се постигне и с помощта
на специалната стойност domain
, т.е. cookieDomain: domain
.
Стойността по подразбиране auto
при атрибута cookieSecure
означава, че ако сайтът работи на HTTPS, бисквитките ще се изпращат с флаг
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'
# handler, сървис, имплементиращ интерфейса SessionHandlerInterface
handler: @handlerService
Опцията autoStart
контролира кога да се стартира сесията.
Стойността always
означава, че сесията ще се стартира винаги при
стартиране на приложението. Стойността smart
означава, че сесията
ще се стартира при стартиране на приложението само тогава, когато вече
съществува, или в момента, в който искаме да четем от нея или да
записваме в нея. И накрая стойността never
забранява
автоматичното стартиране на сесията.
Освен това могат да се настройват всички PHP session директиви (във формат camelCase) и също readAndClose. Пример:
session:
# 'session.name' записваме като 'name'
name: MYID
# 'session.save_path' записваме като 'savePath'
savePath: "%tempDir%/sessions"
Бисквитка за сесия
Бисквитката за сесия се изпраща със същите параметри като други бисквитки, но тези можете да промените за нея:
session:
# домейни, които приемат бисквитката
cookieDomain: 'example.com' # (string|domain)
# ограничение при достъп от друг домейн
cookieSamesite: None # (Strict|Lax|None) по подразбиране е Lax
Атрибутът cookieSamesite
влияе дали бисквитката ще бъде изпратена
при достъп от друг домейн, което
предоставя известна защита срещу атаки Cross-Site Request Forgery (CSRF).
DI сървиси
Тези сървиси се добавят към DI контейнера:
Име | Тип | Описание |
---|---|---|
http.request |
Nette\Http\Request | HTTP заявка |
http.response |
Nette\Http\Response | HTTP отговор |
session.session |
Nette\Http\Session | управление на сесии |