Настройка HTTP

Обзор опций конфигурации для Nette HTTP.

Если вы используете не весь фреймворк, а только эту библиотеку, прочитайте, как загрузить конфигурацию.

HTTP-заголовки

http:
	# заголовки, которые отправляются с каждым запросом
	headers:
		X-Powered-By: MyCMS
		X-Content-Type-Options: nosniff
		X-XSS-Protection: '1; mode=block'

	# affects header X-Frame-Options
	frames: ...      # (string|bool) defaults to '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:
	# 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

Вы можете изменить значения по умолчанию некоторых параметров методов 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 # (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' written as 'name'
	name: MYID

	# 'session.save_path' written as 'savePath'
	savePath: "%tempDir%/sessions"

Сессионный cookie отправляется с теми же параметрами, что и другие cookie, но вы можете изменить их для него:

session:
	# каким хостам разрешено получать cookie-файл
	cookieDomain: 'example.com'   # (string|domain)

	# ограничения при доступе к кросс-оригинальному запросу
	cookieSamesite: None          # (Strict|Lax|None) defaults to Lax

Параметр cookieSamesite влияет на то, отправляется ли cookie при межсайтовых запросах, что обеспечивает некоторую защиту от атак 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 Управление сеансами
версия: 4.0