Web Application Security Memo

ウェブセキュリティに関するメモ書き

セキュリティに関するヘッダを出力するPHPスクリプトの叩き台

※当サイトにはプロモーションが含まれています。

公開日: 更新日:

CentOS

はじめに

セキュリティ関連のHTTPレスポンスヘッダを毎回調べて書くのが面倒なので、ここにまとめておくことにします。

PHPで何か書く時は レスポンスヘッダを出力するあたりに以下を書いておき、制限がキツいようだったら少しずつ緩めていくという使い方をイメージしています。

<?php
// セッションクッキーに httponly 属性を設定
ini_set('session.cookie_httponly', 1);
// セッションクッキーに secure 属性を設定
ini_set('session.cookie_secure', 1);

session_start();

// JavaScriptの実行を許可する対象を 同一オリジンと code.jquery.com と maxcdn.bootstrapcdn.com に制限する
header("Content-Security-Policy: default-src 'self';"
 . " script-src 'self' code.jquery.com maxcdn.bootstrapcdn.com");

// XSS攻撃を検知させる(検知したら実行させない)。
header("X-XSS-Protection: 1; mode=block");

// IEにコンテンツの内容を解析させない(ファイルの内容からファイルの種類を決定させない)。
header("X-Content-Type-Options: nosniff");

// IEでダウンロードしたファイルを直接開かせない。
header("X-Download-Options: noopen");

// このページを iframe に埋め込ませない
header("X-Frame-Options: DENY");

if ($_SERVER['HTTPS'] != '') { // HTTPSアクセスの場合
  // このサイトへのアクセスを HTTPS に制限する
  header("Strict-Transport-Security: max-age=31536000; includeSubDomains");
}

cf. HTTP response headers for security by PHP - Gist

各ヘッダに関する情報

Content-Security-Policy (CSP) (元々は X-Content-Security-Policy)

X-XSS-Protection (XSS Filter)

X-Content-Type-Options

X-Download-Options

X-Frame-Options

Strict-Transport-Security

まとまった情報

最終更新日: 2015-4-27