XSS
ユーザーがWebページにアクセスすることで不正なスクリプトが実行されてしまう脆弱性または攻撃手法
XSSによる被害例
攻撃者による不正ログイン(なりすまし)
利用者のCookieが攻撃者の手に渡ることで、Cookie内にある利用者のセッション情報がそのまま使用されてしまい、利用者の名をかたってサービスを使用されてしまう危険性があります。
XSSへの代表的な対策
Webページに出力するデータのエスケープ処理
Webページの出力に際して特別な意味を持つ文字列(例えば「<」、「&」など)は単なる文字列として出力するようにしましょう。また、エスケープの対象としては、利用者が画面から入力した値はもちろん、外部システムからのデータなどWebページの出力対象となるものは必ずエスケープすることが重要
CSRF
Webアプリケーション利用者自身が意図しない処理が実行されてしまう脆弱性または攻撃手法
CSRFによる被害例
利用者の意図しないWebアプリケーション上の処理実行
図でも表したように、本来はログインした利用者のみが許される記事の投稿処理などがあげられます。
CSRFへの代表的な対策
Formページ返却時のトークン付与
今回の例でいうと、はじめに掲示板への書き込み画面を表示する際にサーバがクライアントに対して特定の文字列(トークン)を設定します。実際に書き込みのリクエストがあった際にサーバーが「この人に送ったトークンと同じトークンがリクエストに入ってる?」と確認することで、攻撃者からの不正なリクエストを防ぐことができます。これは、攻撃者は利用者に送信したトークンの値を知らないためです
XSSとCSRFの違い
観点 | XSS | CSRF |
---|---|---|
実行される場所 | Webブラウザ(Client) | Webアプリサーバ(Server) |
実行可能な処理 | 基本的に自由*1 | Webアプリで定義された処理 |
実行の前提 | 特になし | Webアプリにログイン済み*2 |
*1 JavaScriptで実行可能な範囲であればという意味です
*2 Webアプリ利用者(被害者)がCSRF脆弱性を持つWebアプリケーションに対してログイン済みという意味です