Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

レスポンスヘッダ

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呼び出しの不備

hiroita
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away