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 управление на сесии
версия: 4.0