こんな被害が起きます
訪問者が入力した内容をそのままページに表示するサイトでは、攻撃者が入力欄に仕込んだスクリプトが、他の訪問者のブラウザ上で勝手に実行されてしまうことがあります。結果として、ログイン中のユーザーのCookie情報が盗まれたり、偽のログイン画面が表示されて認証情報を抜き取られたりします。攻撃者は直接サーバーに侵入しなくても、サイトの利用者を経由して被害を広げられるのがXSSの厄介なところです。
XSSとは
XSS(クロスサイトスクリプティング)は、Webサイトの入力箇所や表示処理に悪意あるスクリプトを埋め込み、他の利用者のブラウザ上で実行させる攻撃です。大きく3種類に分かれます。
反射型は、URLのパラメータなどに仕込んだスクリプトがそのままページに反映されるタイプで、悪意あるリンクをクリックさせることで成立します。格納型は、コメント欄や掲示板のようにスクリプトがサーバーに保存され、そのページを見た全員が被害に遭うタイプで、影響範囲が大きくなります。DOM型は、サーバーを経由せずブラウザ側のJavaScript処理の中でスクリプトが実行されるタイプで、静的サイトやSPAでも起こり得ます。
実際にあった被害事例
大手SNSやWebメールサービスでも、投稿機能やプロフィール欄を通じたXSSが繰り返し報告されてきました。国内でも、問い合わせフォームや掲示板機能を持つ中小企業のサイトが改ざんされ、訪問者を不正なサイトへ誘導する事例が発生しています。特にCMSのプラグインやテーマ経由で混入するケースが多く、「制作会社に任せているから大丈夫」という思い込みが被害を大きくする一因になっています。
自分のサイトは大丈夫?チェックポイント
- お問い合わせフォーム、コメント欄、検索窓など、ユーザーが文字を入力できる箇所がある
- 入力した内容が、確認画面や一覧ページなどにそのまま表示される
- CMSやプラグインを長期間アップデートしていない
- 制作から数年経過しており、当時のセキュリティ対策の状況が分からない
対策方法
開発者向け:ユーザー入力を画面に出力する際は、HTMLエスケープを徹底します。テンプレートエンジンの多くはデフォルトでエスケープが有効ですが、独自にHTMLを組み立てている箇所は特に注意が必要です。加えてContent Security Policy(CSP)を設定しておくと、万が一スクリプトが埋め込まれても実行を防げる可能性が高まります。
非エンジニアの方向け:WordPressなどCMSを利用している場合は、本体・テーマ・プラグインを常に最新の状態に保つことが最も効果的な対策です。使っていないプラグインは無効化ではなく削除し、攻撃の入り口を減らしましょう。
無料診断ではここまで
セキュリティブースターの自動診断は、代表的な入力箇所への簡易的なチェックで疑わしい兆候を検出しますが、ログイン後の画面や複雑な業務フローの中に潜むXSSまでは検出しきれません。実際の被害は、こうした自動診断の死角になりやすい箇所で発生することが少なくありません。