LoginSignup
1
1

More than 3 years have passed since last update.

Webアプリのセキュリティ対策まとめ

Posted at

レスポンスヘッダ

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コマンドに渡すパラメータを安全な関数によるエスケープ php // 内部でシェルを呼び出す関数 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呼び出しの不備

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1