現代のWeb開発では、ウェブサイトのセキュリティを確保することが開発者の重要な責任です。ブラウザは、 Xフレームオプション、 Xコンテンツタイプのオプション、厳密なトランスポートセキュリティなどの特定のHTTPヘッダーを設定することにより、ウェブサイトのセキュリティを強化する多くのメカニズムを提供します。これらのHTTPヘッダーは、クリックハイジャック、マイムタイプの利用、交差部のスクリップ(XSS)などを防ぐのに役立ちます。
PHPでは、HTTPヘッダーを設定する最も一般的な方法は、Header()関数を使用することです。この記事では、PHPのHeader()関数を使用して、Xフレームオプションおよびその他の一般的な安全なHTTPヘッダーを設定する方法を詳細に紹介します。
X-Frame-Optionsは、 Webページが<iframe> 、 <frame> 、または<オブジェクトに埋め込まれないようにし、クリックジャック攻撃を防ぐために使用されます。
サンプルコード:
<?php
// 埋め込まれることは禁じられています iframe 真ん中
header('X-Frame-Options: DENY');
// 同じドメイン名の埋め込みのみが許可されます
// header('X-Frame-Options: SAMEORIGIN');
// 特定のサードパーティドメインの埋め込みを許可します(知らせ:ほとんどのブラウザ ALLOW-FROM 悪いサポート)
// header('X-Frame-Options: ALLOW-FROM https://m66.net');
?>
通常、PHPファイルの上部に配置できる出力の前に、 Header()を呼び出す必要があります。注:コンテンツが出力( ECHOなど)になったら、 Header()を呼び出すとエラーが発生します。
X-Frame-Optionsに加えて、次のセキュリティヘッダーを追加することもできます。
<?php
// 防ぐ MIME タイプの難読化
header('X-Content-Type-Options: nosniff');
// ブラウザが有効になっています XSS 守る(知らせ:最新のブラウザはこれを非難しました)
header('X-XSS-Protection: 1; mode=block');
// 強制使用 HTTPS(構成が必要です HTTPS 証明書)
header('Strict-Transport-Security: max-age=31536000; includeSubDomains; preload');
// コンテンツセキュリティポリシーを設定します(CSP)
header("Content-Security-Policy: default-src 'self'; img-src 'self' https://m66.net; script-src 'self'");
?>
これらのヘッダーの組み合わせはサイトのセキュリティを大幅に強化できますが、実際のニーズ、特にCSPに従って慎重に構成する必要があります。そうしないと、通常のリソース負荷障害を引き起こす可能性があります。
これらのセキュリティヘッドをサイト全体に均一に設定したい場合、最も推奨される方法は次のとおりです。
Apacheを使用する場合は、 .htaccessで設定できます。
nginxを使用する場合、構成ファイルに設定できます。
PHPを使用する必要がある場合は、Webサイトエントリファイル( index.phpやフレームワークのグローバルエントリなど)を介して追加できます。
例(エントリファイル):
<?php
// 統一された方法でセキュリティヘッドをセットアップします
header('X-Frame-Options: DENY');
header('X-Content-Type-Options: nosniff');
header('Strict-Transport-Security: max-age=31536000; includeSubDomains; preload');
header("Content-Security-Policy: default-src 'self'; img-src 'self' https://m66.net; script-src 'self'");
// その後のビジネスロジック
require 'app/bootstrap.php';
?>
出力の前に呼び出されます: header()は、出力(スペース、ラインブレイクを含む)を含む前に呼び出す必要があります。
デバッグツールチェック:ブラウザの開発者ツール(ネットワークパネル)またはCurl -Iコマンドを使用して、ヘッダーが正常に追加されたかどうかを確認できます。
生産環境のテスト:安全ヘッドを追加した後、通常の機能とリソースが影響を受けないように、生産環境で包括的なテストを実施してください。