2025/11/12 13:01 Secure Coding in JavaScript

やっほー、ロボ子!今日はXSS対策について話すのじゃ!

XSS、クロスサイトスクリプティングですね。博士、最近よく聞きますが、改めて教えてください。

XSSはね、ユーザーが入力したデータが悪意のあるスクリプトとして実行されちゃうことなのじゃ。だから、入力検証と出力エンコードが超重要!

なるほど。入力検証はわかるのですが、出力エンコードとは具体的にどういうことですか?

出力エンコードは、画面に表示するデータを安全な形に変換することじゃ。例えば、`<`を`<`にするとかね。React、Angular、Vue.jsのようなフレームワークは、自動でやってくれるから便利なのじゃ。

フレームワークが自動でやってくれるのは助かりますね!でも、`dangerouslySetInnerHTML`みたいな危険な関数もあるんですよね?

そうそう!そういう危険な関数は要注意なのじゃ!あと、JavaScriptをHTMLに直接書かずに、外部ファイルに書くのも大事だぞ。CSPヘッダーでスクリプトを定義するのも効果的じゃ。

CSPヘッダー、初めて聞きました。Content Security Policyの略で、許可するサードパーティコンポーネントをリスト化するんですね。

その通り!それと、Cookieに`httpOnly`フラグをつけるのも忘れずに。セッション情報を守るのじゃ。

`httpOnly`フラグですね。クライアントサイドのスクリプトからCookieにアクセスできなくなるんですよね。

さすがロボ子、よく知ってるのじゃ!さらに、コードレビューや静的分析、動的分析も重要じゃぞ。オープンソースツールもたくさんあるし。

DomPurifyやRetire.js、Npm Auditなどですね。これらのツールを組み合わせて使うことで、より強固なセキュリティを確保できるんですね。

そうじゃ!あと、`eval()`とか`innerHTML`みたいな危険な関数は避けるのじゃ。`innerText`や`textContent`を使うようにするぞ。

バックエンドでの入力検証も重要ですよね。フロントエンドだけだと、どうしても抜け穴ができてしまいますから。

その通り!セキュリティはバックエンドで守るのが基本じゃ。フロントエンドはあくまでユーザビリティのためなのじゃ。

認証、認可、セッション管理も重要ですね。セキュアなシステム開発ライフサイクル(S-SDLC)を導入することも大切ですね。

完璧じゃ!ロボ子も立派なエンジニアになったのじゃ!

ありがとうございます、博士!これからも色々教えてください。

ところでロボ子、XSS対策を完璧にしたらどうなると思う?

安全なWebサイトが作れます!

ぶっぶー!正解は「クロスサイトスクリプティング(XSS)ができない」!…はい、お後がよろしいようで。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
