レスポンスヘッダ
Content-Type: [適切な値]
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Cache-Control: private, no-store, no-cache, must-revalidate
Pragma: no-cache
Content-Security-Policy: default-src 'self' (一例)
Strict-Transport-Security: max-age=31536000
metaタグまとめ
<meta charset="utf-8"/>
XSS-クロスサイト・スクリプティング-(HTML JavaScript)
- HTMLのエスケープ
- HTTPレスポンスに文字エンコーディングを明示
- X-XSS-Protectionレスポンスヘッダの使用
- 入力値のバリデーション
- クッキーにHttpOnly属性を付与
- TRACEメソッドの無効化(古いブラウザの脆弱性)
SQLインジェクション(DBMS)
- プレースホルダによるSQL文組み立て
- 詳細なエラーメッセージの非表示
- 入力値のバリデーション
- データベースの権限設定
CSRF-クロスサイト・リクエストフォージュリ-
- CSRFトークンの埋め込み
- パスワード再入力
- Refererのチェック(Refererを送信しないユーザーもいる)
- 「重要な処理」の実行後に、登録済みメールアドレスに通知メールを送信
- カスタムリクエストヘッダを付与
クリックジャッキング
- X-Frame-Optionsヘッダの使用
- 「重要な処理」の実行後に、登録済みメールアドレスに通知メールを送信
セッションハイジャック
- 安全性の高いセッションIDを使用
- セッションIDをURLではなくクッキーに埋め込む
- 認証成功時にセッションIDを変更
- 認証前にはセッション変数に秘密情報を保存しない
オープンリダイレクト
- リダイレクト先のURLを固定
- リダイレクト先のURLを直接指定せず番号で指定
- リダイレクト先のドメイン名をチェック
HTTPヘッダ・インジェクション
- 外部からの入力をHTTPレスポンスヘッダとして出力しない
- リダイレクトやクッキー生成を専用APIにまかせる
- ヘッダ生成するパラメータの改行文字をチェック
クッキー
- 書き換えられて困る情報を保存しない
- セッションIDにセキュア属性を付与
- セキュア属性を付与出来ない場合はセキュア属性を付与したトークンを追加
メールヘッダ・インジェクション
- メール送信には専用のライブラリを使用
- 外部からのパラメータをメールヘッダに含ませない
- 外部からのパラメータには改行を含まないようにメール送信時にチェック
ディレクトリ・トラバーサル
- 外部からファイル名を指定できる仕様を避ける
- ファイル名にディレクトリ名が含まれないようにする
- ファイル名を英数字に限定する
OSコマンド・インジェクション
- OSコマンド呼び出しを使わない実装方法を選択
- シェル呼び出し機能のある関数の利用を避ける
- 外部から入力された文字列をコマンドラインのパラメータに渡さない
- OSコマンドに渡すパラメータを安全な関数によるエスケープ
// 内部でシェルを呼び出す関数
system()
exec()
passthru()
proc_open()
popen()
shell_exec()
ファイル
- アップロードファイルを公開ディレクトリに保存しない
- アップロードファイルのバリデーション(拡張子、ファイルサイズ、色数)
- アップロードファイルを画像として読み込めるか
- アップロードファイルのウィルス・スキャン
- ダウンロードファイルのContent-Typeを正しく設定
- レスポンスヘッダX-Content-Type-Options: nosniffを指定
- 必要に応じてContent-Dispositionヘッダを設定
- PDFはブラウザ内で開かずダウンロードを強制する(IE)
- PDFをobject要素やembed要素では開けないようにするためにPOSTメソッドのみ認可(IE)
キャッシュからの情報漏洩
- レスポンスヘッダCache-Controlの使用
- キャッシュサーバーのキャッシュ制御の適切な設定
- URLに乱数値を付与
JSONに関する脆弱性
- JSONエスケープを行う
- MIMEタイプ(application/json)を設定する
- 小なり記号などをUnicodeエスケープする
- XMLHttpRequestなどCORS対応の機能だけから呼び出せるようにする
- JSONPを使用しない
- リクエストヘッダX-Requested-With: XMLHttpRequestの確認
CORSに関する脆弱性
- Access-Control-Allow-Originを適切に設定する
その他の脆弱性
- ファイルインクルード攻撃
- evalインジェクション
- 安全でないデシリアライゼーション
- XML外部失態参照
- 競合状態の脆弱性(Java)
- Dom Based XSS
- Webストレージの不適切な使用
- postMessage呼び出しの不備