名前が紛らわしいので混乱するWeb脆弱性「CSRF(クロス・サイト・リクエスト・フォージェリー)」と「XSS(クロス・サイト・スクリプティング)」について

名前が紛らわしいので混乱するWeb脆弱性「CSRF(クロス・サイト・リクエスト・フォージェリー)」と「XSS(クロス・サイト・スクリプティング)」について

CSRF(Cross Site Request Forgery=サイトをまたがったリクエスト偽造)

フォージェリーが日本人的には、あんまりピンと来ませんが「偽造」という意味らしいです。
読み込んだら、自動的にリクエスト送信してしまうページを作ります。
そして、より分かりづらくするために、1ピクセルのiframeで隠す。

なので、基本的にはユーザ側で防げる手段は無い。怪しげなサイトには行かない、SNSへの書き込みなら自動ログインをOFFにする位?
ウィルスを作らなくても、掲示板への犯罪予告的な書き込みを被害者のブラウザから行う事とも出来たりするので怖い!
パスワードを変更されてアカウントを乗っ取られたり…。

書き込みをされる側の開発者としては、外部からのリクエスト要求(POST/GET)は弾くような工夫が必要。
具体的には、リファラーを確認する。トークンで識別する、などがあります。

XSS(Cross Site Scripting = サイトをまたがったスクリプト実行)
掲示板などユーザが入力した文字を、そのまま反映させるWebプログラムなどで発生する脆弱性です。
1,攻撃者が <script>alert("警告")</script>など、被害者のブラウザで実行させたいスクリプトを掲示板に書き込む
2,何も知らない被害者が掲示板を見ると、被害者のブラウザがそのスクリプトを実行
3,書き込み先が変更されたり、クッキー値を盗聴されたり、別のページが表示されたり(フィッシング詐欺)などろくな事が起きない。
こちらは、必ずしもサイトをまたがる訳ではないので「スクリプト・インジェクション(注入)」という呼び方の方が実態に近いですね。

掲示板などWebフォーム開発者としては、送信されるデータをサニタイズ(スクリプト無効化)する必要があります。
PHPでは、以下のように関数で簡単にできます。

以下のように変換されます。

ブラウザ上では、ちゃんと表示される。