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 クッキー

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 を使用しても達成できます。

cookieSecure 属性のデフォルト値 auto は、ウェブサイトが HTTPS で実行されている場合、クッキーは Secure フラグ付きで送信され、したがって HTTPS 経由でのみ利用可能になることを意味します。

HTTP プロキシ

ウェブサイトが HTTP プロキシの背後で実行されている場合は、HTTPS 経由の接続検出とクライアントの IP アドレスが正しく機能するように、その 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:
	# クッキーを受け入れるドメイン
	cookieDomain: 'example.com'   # (string|domain)

	# 他のドメインからのアクセス時の制限
	cookieSamesite: None          # (Strict|Lax|None) デフォルトは Lax

cookieSamesite 属性は、他のドメインからのアクセス時にクッキーが送信されるかどうかに影響します。これは、クロスサイトリクエストフォージェリ(CSRF)攻撃に対するある程度の保護を提供します。

DI サービス

これらのサービスは DI コンテナに追加されます:

名前 説明
http.request Nette\Http\Request HTTP リクエスト
http.response Nette\Http\Response HTTP レスポンス
session.session Nette\Http\Session セッション管理
バージョン: 4.0