Настройка на HTTP
Преглед на опциите за конфигуриране на Nette HTTP.
Ако не използвате цялата рамка, а само тази библиотека, прочетете как да изтеглите конфигурацията.
HTTP хедъри
http:
# заглавия, които се изпращат с всяка заявка
headers:
X-Powered-By: MyCMS
X-Content-Type-Options: nosniff
X-XSS-Protection: '1; mode=block'
# header 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:
# Доклад за политиката за сигурност на съдържанието
cspReportOnly:
default-src: self
report-uri: 'https://my-report-uri-endpoint'
# Политика за характеристиките
featurePolicy:
unsized-media: none
geolocation:
- self
- https://example.com
Бисквитка HTTP
Можете да промените стойностите по подразбиране на някои параметри на методите Nette\Http\Response::setCookie( ) и session.
http:
# обхвата на "бисквитката" по пътя
cookiePath: ... # (string) по подразбиране е '/'
# на кои хостове е разрешено да получават бисквитки
cookieDomain: 'example.com' # (string|домейн) по подразбиране не е зададен
# изпращате бисквитки само чрез HTTPS?
cookieSecure: ... # (bool|auto) по подразбиране е auto
# деактивира изпращането на бисквитки, които Nette използва за защита срещу CSRF
disableNetteCookie: ... # (bool) по подразбиране е false
Параметърът cookieDomain
определя кои домейни (произход) могат да
приемат “бисквитката”. Ако не е посочено, “бисквитката” се приема от
същия (под)домейн, за който е зададена, изключвайки техните
поддомейни. Ако е посочен cookieDomain
, поддомейните също ще бъдат
включени. Така че посочването на cookieDomain
е по-малко ограничаващо,
отколкото пропускането му.
Например, ако е посочен cookieDomain: nette.org
, “бисквитката” е
достъпна и за всички поддомейни, например doc.nette.org
. Това може да
се постигне и чрез посочване на domain
, т.е. cookieDomain: domain
.
Стойността по подразбиране на cookieSecure
е auto
, което
означава, че ако сайтът работи на 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[]) по подразбиране е none
Сесия
Основни настройки на сесията:
session:
# показва панела на сесията в панела на Tracey?
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"
Бисквитка за сесия
Сесийната “бисквитка” се изпраща със същите параметри като другите “бисквитки”, но можете да ги промените за нея:
session:
# на кои хостове е разрешено да получават "бисквитката
cookieDomain: 'example.com' # (string|домейн)
# ограничения на кръстосания достъп до заявките
cookieSamesite: None # (Strict|Lax|None) по подразбиране е Lax
Опцията cookieSamesite
влияе върху това дали се изпраща бисквитка
при заявки от различни сайтове,
което осигурява известна защита срещу атаки 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 | управление на сесии |