セキュリティチェックリスト
CakePHP 2 のアプリケーションを本番環境で運用する前に、次の点を確認してください。 各項目には、設定を説明しているページへのリンクを付けています。
デバッグモードを無効にする
本番環境では debug を 0 にしてください。デバッグレベルが高いと、エラーメッセージ、スタックトレース、 SQL クエリが訪問者に表示されます。pieceofcake2/app スケルトンから作成したアプリケーションは DEBUG 環境変数からデバッグレベルを読み込み、設定されていない場合はレベル 2 を使います。 本番サーバーでは DEBUG=0 を設定してください。core.php の更新 を参照してください。
独自のソルトとシード値を使う
Security.salt と Security.cipherSeed には、スケルトンに含まれる値ではなく、アプリケーション固有の 秘密の値を設定してください。ソルトは CSRF トークンとフォーム改ざん防止のトークンの署名に使われ、 CookieComponent の既定の暗号化キーにもなります。スケルトンの既定のソルトを使っている間は、 CakePHP が通知を表示します。スケルトンは SECURITY_SALT と SECURITY_CIPHER_SEED 環境変数から値を読み込みます。CakePHP のコア設定 の Security.salt と Security.cipherSeed、および 環境変数 を参照してください。
ソルトを変更すると、発行済みの CSRF トークンと、既定のキーで暗号化したクッキーは無効になります。
依存パッケージを最新に保つ
セキュリティ修正は最新のリリースにだけ提供されます (サポートするバージョン を参照してください)。pieceofcake2/cakephp、プラグイン、その他のパッケージを Composer で定期的に更新し、 本番環境では開発用の依存パッケージを除いてインストールしてください。
composer update
composer install --no-dev --optimize-autoloadercomposer/ca-bundle も最新に保ってください。このパッケージは、HttpSocket の HTTPS 接続で使う CA 証明書を提供します。脆弱性への対応 と 本番用の依存パッケージのインストール を参照してください。
フォームと CSRF に SecurityComponent を使う
フォームを扱うコントローラーでは SecurityComponent を読み込んでください。フォームの改ざんを検出し、CSRF 対策 ($csrfCheck、既定で有効) では GET・HEAD・OPTIONS 以外のすべてのリクエストでトークンを検証します。コントローラー全体でチェックを 無効にせず、必要なアクションやフィールドだけを対象外にしてください。
入力は データバリデーション で検証してください。また、ビュー・レイアウト・ エレメントの名前や Xml::build() への入力を、確認せずにユーザーの入力から組み立てないでください (脆弱性への対応 を参照してください)。
クッキーとセッションを保護する
- CakePHP は、セッションのクッキーに
session.cookie_httponlyを設定し、HTTPS のリクエストではsession.cookie_secureも設定します。これらの ini の値を自分で設定している場合は、その値が使われます。session.cookie_samesiteなどその他のセッションの ini の設定は、Session.iniで設定できます。 セッション を参照してください。 CookieComponentは、既定ではsecureとhttpOnlyのフラグを設定しません。クッキーを HTTPS でだけ 送るように$this->Cookie->secure = true;を設定し、JavaScript から読む必要がないクッキーには$this->Cookie->httpOnly = true;を設定してください。Cookie を参照してください。- クッキーの暗号化タイプは、既定の
'cipher'ではなく'aes'を使い、Security.useOpenSslを有効にしてください。 CookieComponent のcipherタイプ を参照してください。
ファイルのパーミッションを制限する
ドキュメントルートを webroot/ ディレクトリに設定し、アプリケーションのコード、設定、vendor/ に URL でアクセスできないようにしてください。ウェブサーバーが書き込む必要があるのは tmp/ と logs/ だけです。ドキュメントルートの指定、 パーミッション、URLリライティング を参照してください。
HTTPS を使う
アプリケーションは HTTPS だけで提供してください。CakePHP が HTTPS を検出すると (HTTPS サーバー変数)、 セッションのクッキーに secure 属性が付きます。SecurityComponent::requireSecure() を使うと、 アクションを HTTPS に限定できます。アクションを SSL 通信に限定 を参照してください。TLS とリダイレクトはウェブサーバーで設定してください。 URLリライティング と デプロイ を参照してください。
サポートされている PHP を使う
pieceofcake2/cakephp は PHP 8.0 から 8.5 で動作します (システム要件 を参照してください)。PHP プロジェクトからセキュリティ修正が提供されているバージョンの PHP を使ってください。 php.net の Supported Versions を参照してください。
