MENU

XSSとは?Webサイトの代表的な脆弱性攻撃を初心者向けにわかりやすく解説

目次

XSSとは?

XSS(クロスサイトスクリプティング)とは、Webサイトの脆弱性を利用して、悪意のあるスクリプトをユーザーのブラウザで実行させる攻撃のことです。

例えば、掲示板やコメント欄など、ユーザーが入力した内容をそのままページに表示する仕組みがある場合、その入力内容に悪意のあるJavaScriptを埋め込まれる可能性があります。

その結果、以下のような被害が発生することがあります。

  • ユーザーのログイン情報の盗難
  • セッションIDの取得
  • 偽の画面を表示させるフィッシング
  • 不正な操作の実行

このように、ユーザーのブラウザ上でスクリプトを実行させてしまう攻撃がXSSです。

XSSのイメージ

例えば、コメント欄があるWebサイトを考えてみます。

通常のコメント

とても良いサイトですね!

しかし、悪意のあるユーザーが次のようなコードを投稿した場合

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

もしこの内容がそのままページに表示されると、ページを閲覧したユーザーのブラウザでJavaScriptが実行されてしまいます。

その結果、

  • クッキー情報を送信
  • ログイン情報を盗む
  • 別サイトへリダイレクト

といった攻撃が可能になります。

XSSが起こる原因

XSSの主な原因は、

ユーザー入力を適切に処理せず、そのままHTMLとして表示してしまうことです。

例えば次のようなコードです。

echo $_GET['name'];

もし name にHTMLタグやJavaScriptが含まれていた場合、それがそのままブラウザで実行されてしまいます。

XSSの種類

XSSにはいくつか種類があります。

① 反射型XSS(Reflected XSS)

URLパラメータなどに含まれたスクリプトが、レスポンスにそのまま反映されて実行されるタイプです。

https://example.com/?keyword=<script>...</script>

主にフィッシングメールなどで悪用されます。

② 保存型XSS(Stored XSS)

掲示板やコメント欄などに悪意あるスクリプトが保存され、それを閲覧したユーザー全員に影響するタイプです。

  • コメント欄
  • プロフィール
  • 投稿フォーム

被害が広がりやすいため、危険度が高いとされています。

③ DOM型XSS

サーバーではなく、JavaScriptの処理によってブラウザ上で発生するXSSです。

フロントエンドのコードの書き方によって発生するため、JavaScript実装でも注意が必要です。

XSSの対策方法

XSS対策の基本は、ユーザー入力をそのまま表示しないことです。

主な対策は以下です。

HTMLエスケープ

HTMLタグとして解釈されないように変換します。

例(PHP)

htmlspecialchars($text, ENT_QUOTES, 'UTF-8');

これにより

<script>

&lt;script&gt;

のように変換されます。

テンプレートエンジンを利用する

LaravelやBladeなどのテンプレートでは、基本的に自動でエスケープされます。

{{ $text }}

入力値のバリデーション

  • HTMLタグを禁止する
  • 入力形式を制限する

などの対策も有効です。

まとめ

XSS(クロスサイトスクリプティング)は、Webサイトの代表的な脆弱性の一つです。

ユーザーの入力をそのまま表示してしまうと、悪意のあるスクリプトが実行される可能性があります。

重要なポイントは次の3つです。

  • XSSはユーザーのブラウザでスクリプトを実行させる攻撃
  • 原因はユーザー入力をそのままHTMLとして表示すること
  • 対策は「HTMLエスケープ」が基本

Webアプリケーションを開発する際は、ユーザー入力を必ずエスケープすることを意識しましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Muta Blog運営者はデザインも開発もやるWebエンジニアです。
本ブログでは現場で培ったWebの知識やノウハウを発信しています。
Web制作歴5年/現在ReactやRubyを中心に幅広く学習中/

目次