結論:出力時のエスケープが最大の対策です
XSS(クロスサイトスクリプティング)とは、サイトの出力処理の不備を突いて、訪問者のブラウザ上で意図しない動作を起こさせる脆弱性のことです。攻撃の再現方法ではなく、守る側の知識として仕組みと対策を押さえます。PHP側の全体像はPHPの脆弱性とはで整理しています。
XSSの仕組み:入力がそのまま表示されると起きる
たとえば検索フォームに入れた文字が、そのまま結果ページに表示される作りだとします。そこにHTMLのタグとして解釈される文字が混ざると、ブラウザはそれを「ただの文字」ではなく「動く指示」として実行してしまいます。これがXSSの基本形です。
ポイントは、悪意のある入力を受け付けたこと自体ではなく、それを無害化せず表示したことが原因だという点です。入力の検査と、出力時のエスケープ(タグとして解釈されない形への変換)の両輪で防ぎます。
3つの種類:反射型・格納型・DOM型
| 種類 | 仕組み(一言) | 注意点 |
|---|---|---|
| 反射型 | 検索結果などの一時表示に紛れ込む | 偽リンク経由で誘導される形が多い |
| 格納型 | 掲示板・コメント欄などに保存され開くたび発動する | 影響範囲が広がりやすく深刻化しやすい |
| DOM型 | ブラウザ側の処理(JavaScript)での組み立てに紛れ込む | サーバー側の対策だけでは塞げない場合がある |
種類の区別は対応の優先度付けに使います。まず格納型の入口(保存して表示する機能)を重点的に見直し、次に反射型の表示箇所、余裕があればDOM型の作りを確認する順番が効率的です。
何が起きるのか:被害のイメージ
成立すると、訪問者のブラウザ上で次のような被害が起きる可能性があります。
- ログイン状態の悪用や入力情報の窃取
- 本物そっくりの偽画面への誘導
- サイトの表示改変による信頼の失墜
被害を受けるのは主に訪問者であり、運営者は気づかないうちに加害の踏み台にされます。「うちは小さいサイトだから大丈夫」は通用せず、自動的に弱点を探す仕組みに見つかると規模を問わず狙われます。
対策:エスケープを中心に多層で守る
基本は出力時のエスケープの徹底です。PHPでは表示箇所ごとに用途に合った変換を行い、タグとして解釈されない形にします。フレームワークやテンプレートエンジンの自動エスケープ機能を使うと漏れが減ります。
- ブラウザへの出力はすべてエスケープし、未処理の表示箇所を残さないか
- 入力は形式・長さ・許可文字を検査し、想定外を受け付けないか
- CookieにHttpOnly・Secure属性を設定し、窃取時の被害を抑えているか
- WordPress本体・テーマ・プラグインを最新にし、使わないものを削除したか
- 管理画面のパスワードを使い回さず、漏洩警告が出たものは使わないか(パスワード漏洩警告の記事)
- 通信をHTTPSに統一したか(SSLとは)
FreeHostBoxでの進め方
FreeHostBoxでは無料SSLによるHTTPS化、PHP 8.3での現行運用、WordPressの自動設置と更新のしやすさをご用意しています。まず無料プランで実際に触って確かめてみてください。公開前に入力欄のあるページ(検索・問い合わせ・コメント)を洗い出し、表示箇所のエスケープ漏れがないかを確認する習慣が効果的です。
まとめ
XSSは「入力のせい」ではなく「表示の作りのせい」で起きる脆弱性です。出力のエスケープを徹底し、入力検査・Cookie設定・更新を重ねることで、ほとんどの被害は防げます。サーバー側全体の対策はPHPの脆弱性とは、大量アクセスへの備えはDDoS攻撃とはも合わせてどうぞ。
次に読む記事
よくある質問
XSSとは何ですか?
サイトの出力処理の不備を突き、訪問者のブラウザ上で攻撃者の用意した動作が実行されてしまう脆弱性です。サイト自体が改ざんされていなくても、表示の作り方に穴があると成立します。
どんな被害がありますか?
ログイン状態の悪用、入力情報の窃取、偽画面への誘導、サイトの信頼失墜などです。被害を受けるのは主に訪問者であり、運営者は加害の踏み台にされる形になります。
反射型と格納型の違いは?
反射型は検索結果などへの一時的な表示に紛れ込む形、格納型は掲示板やコメント欄などに保存されて開くたびに発動する形です。格納型は影響範囲が広がりやすいため特に注意が必要です。
対策の基本は何ですか?
出力時のエスケープの徹底が基本です。加えてCookieの属性設定、入力の検査、フレームワークの自動エスケープ機能の利用、WordPress一式の更新が有効です。
WordPressを使っていれば安全ですか?
本体側で対策はされていますが、テーマやプラグインの作りや設定次第で弱点が生まれます。本体・テーマ・プラグインの更新と、使わないものの削除を続けてください。
安全なパスワードでFreeHostBoxを始める
漏洩警告が出たパスワードは使わず、固有の強いパスワードで登録へ進みましょう。無料プランですぐに試せます。