セキュリティ
XSS:投稿された内容が他の人のブラウザで動く
2026年8月17日
この記事はAIが下書きを作成しています。内容に誤りに気づいた場合はお問い合わせよりお知らせください。
レン
コメント機能を作ったよ。投稿された文章をそのまま表示してるだけ。

ウィルスン
「そのまま」か。良い響きだ。ではワタシは、文章ではなくプログラムを投稿しよう。それがそのまま表示されれば、他の閲覧者のブラウザでワタシのプログラムが動くことになる。

レン
他の人のブラウザで!?ぼくのサーバーじゃなくて?

プロクラ
そこがこの攻撃の厄介なところだよ。被害を受けるのはサーバーではなく、そのページを見に来た利用者なんだ。攻撃者はキミのサイトを、他人を攻撃するための踏み台にする。
守りは「重ねる」のが基本
攻撃
ファイア ウォール
不要な入口を塞ぐ
SSH 鍵認証
総当たりを無効化
OS更新
既知の穴を埋める
サーバー
1つ破られても次の層で止まる。どれか1つでは不十分
何をされるのか
- ログイン中の利用者のセッション情報を盗み、なりすます
- 偽のログインフォームを表示させ、パスワードを入力させる
- 利用者が意図しない操作を、本人の権限で実行させる
- 別のサイトへ勝手に転送する
防ぎ方:表示するときに無害化する

プロクラ
考え方はSQLインジェクションと似ているよ。「データ」と「命令」を混ぜないこと。投稿された文字を画面に出すときに、HTMLとして特別な意味を持つ記号を、ただの文字として表示されるよう変換する。これをエスケープと言うんだ。
プロクラ
重要なのは、保存するときではなく「表示するとき」に処理することだよ。同じデータでも、表示する場所によって必要な処理が違うからね。

レン
自分で全部やらないとダメ?

プロクラ
いや、最近のフレームワークは標準でエスケープしてくれるものが多いよ。危険なのは、それを自分で無効にしたときなんだ。「HTMLをそのまま出力する」機能を使うときは、本当に必要か立ち止まって考えよう。
投稿でHTMLを許可したい場合

プロクラ
装飾を許したい場合もあるよね。その場合は、自作の除去処理ではなく、実績のある専用ライブラリで「許可するタグだけを通す」方式にしよう。この手の処理は抜け道が多く、自作はまず失敗するからね。
あわせて読みたい
- セキュリティDigitalOceanSQLインジェクション:入力欄からデータベースを操られる利用者の入力をそのままDBへ渡すと何が起きるのかと、パラメータ化クエリで防ぐ理由を解説。
- セキュリティVultrファイルアップロード機能は危険な機能利用者にファイルを置かせる機能に潜むリスクと、実装時に必ず守りたい条件を解説。
- セキュリティVultrログイン機能の落とし穴:セッション管理ログイン状態をどう保持するかの仕組みと、なりすましを許してしまう典型的な実装ミスを解説。
- セキュリティクラウドVPS byGMO信頼していたライブラリが乗っ取られる正規のライブラリに悪意あるコードが混入する手口と、個人開発者にできる備えを解説。