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|null) 既定は 'SAMEORIGIN'
安全のために、フレームワークは X-Frame-Options: SAMEORIGIN
のヘッダーを送ります。これは、ページを別のページの中(<iframe>
要素の中)に表示してよいのは同じドメインの場合だけだと伝えます。場面によっては(たとえば
Facebook
のアプリケーションを作っているとき)これが望ましくないこともあるので、frames: http://allowed-host.com
で特定のホストを許したり、frames: true
でどこからでも埋め込めるようにしたり(ヘッダーが省かれます)、frames: false
で完全に禁じたり(X-Frame-Options: DENY)して、振る舞いを変えられます。
既定では Nette は X-Powered-By: Nette Framework 3 と Content-Type: text/html; charset=utf-8
のヘッダーも送ります。これらの既定のものも含め、どのヘッダーも値を空の文字列にすれば取り除けます。
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[]) 既定では未設定
HTTPS を強制する
リクエストのスキームを無条件に HTTPS にします。これは、TLS を終端しつつ
X-Forwarded-Proto
のヘッダーを渡さない負荷分散装置やリバースプロキシの後ろで動く、HTTPS
だけのサイトに役立ちます。そうした場合、標準の HTTPS の判別は(HTTP
のプロキシを設定していても)働かないからです。
http:
# すべてのリクエストで HTTPS のスキームを強制します
forceHttps: true # (bool) 既定は false
セッション
セッションの基本の設定です。
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 | セッションの管理 |
http.requestFactory |
Nette\Http\RequestFactory | HTTP のリクエストを作るファクトリ |