JavaScript Tips | セキュリティ:XSS対策用の文字列処理をする

JavaScript JavaScript
スポンサーリンク
スポンサーリンク
  1. XSS対策用の文字列処理は「ユーザー入力を“攻撃コード”ではなく安全なデータとして扱うための基盤技術」
  2. XSSの基本イメージを持つ(なぜ文字列処理が必要なのか)
    1. 危険な入力例
    2. 文字列処理の目的
  3. ステップ1:HTML用の文字列処理(HTMLエスケープ)
    1. 対象となる危険な文字
    2. ユーティリティ関数
    3. 使用例:コメント表示
  4. ステップ2:属性値用の文字列処理(属性エスケープ)
    1. 危険な例
    2. 安全な属性用エスケープ
    3. テンプレートでの利用
  5. ステップ3:URL用の文字列処理(URLエンコード)
    1. 危険な例
    2. 安全な書き方(encodeURIComponent)
  6. ステップ4:JavaScript文字列用のエスケープ
    1. 危険な例
    2. JS文字列用エスケープ
  7. ステップ5:場面ごとに適切な文字列処理を選ぶ
    1. 1. HTML本文に埋め込む → escapeHtml
    2. 2. HTML属性値に埋め込む → escapeAttr
    3. 3. URLパラメータに埋め込む → encodeURIComponent
    4. 4. JavaScript文字列に埋め込む → escapeJsString(ただし極力避ける)
  8. ステップ6:業務で使える「XSS対策用文字列処理ユーティリティ」(まとめ版)
  9. ステップ7:実務でのテンプレート例
    1. コメント一覧を安全に表示する
    2. 検索画面のリンク生成
  10. 深掘り:なぜ「XSS対策用の文字列処理」がここまで重要なのか
    1. 1. XSSは「たった1箇所の未処理」から始まる
    2. 2. ユーザー入力は「絶対に信頼しない」
    3. 3. フレームワークに頼り切ると危険な場面がある
    4. 4. 文字列処理は“セキュリティの第一歩”
  11. まとめ:XSS対策用の文字列処理は「ユーザー入力を安全に扱うための日常的な防御習慣」

XSS対策用の文字列処理は「ユーザー入力を“攻撃コード”ではなく安全なデータとして扱うための基盤技術」

Web業務システムで避けて通れないセキュリティテーマが XSS(クロスサイトスクリプティング)対策です。 XSS対策用の文字列処理とは、ざっくり言うと次のことを指します。

  • ユーザー入力や外部から来た文字列を
  • そのまま「HTML」「JavaScript」「URL」として解釈させず
  • 必要な場面ごとに 安全な形に変換してから使う

ここでは、初心者でも理解しやすいように、 「どこが危険なのか」→「何をどう変換するのか」→「実務で使えるユーティリティ」 という流れでステップバイステップで解説していきます。

XSSの基本イメージを持つ(なぜ文字列処理が必要なのか)

危険な入力例

ユーザーが次のような文字列を入力したとします。

<script>alert('攻撃');</script>

これをそのまま画面に表示すると、ブラウザは「文字列」ではなく JavaScriptコードとして実行してしまいます。

文字列処理の目的

XSS対策用の文字列処理の目的は、 「本来コードとして解釈される記号を、ただの文字として扱わせる」 ことです。

そのために、場面ごとに次のような変換を行います。

  • HTMLとして表示するとき → HTMLエスケープ
  • 属性値に入れるとき → 属性用エスケープ
  • URLパラメータに入れるとき → URLエンコード
  • JavaScript文字列に埋め込むとき → JS文字列エスケープ
タイトルとURLをコピーしました