0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

クロスサイトスクリプティング(XSS)の危険性とその対策について

Last updated at Posted at 2021-05-05

クロスサイトスクリプティング(XSS)とは

一言で言うと脆弱性がある掲示板のようなウェブサイトに、悪意のある第三者がそこへ罠を仕掛け、サイト訪問者の個人情報を盗むなどの被害をもたらす攻撃です。 ある掲示板サイトがあったとして、そこに悪意を持ったユーザがJavaScript等で作成した不正なスクリプトを含んだリンクを投稿します。 もし掲示板に脆弱性があるとそのスクリプトが掲示板に埋め込まれ、他のユーザが投稿されたリンクをクリックしたりするとスクリプトが実行されてしまい以下のような被害が発生します。

スクリプトが実行されたときの具体的な被害について

  • 本物のWebサイト上に偽のWebサイトが表示される
  • ブラウザが保存しているCookieを取得される
  • 任意のCookieをブラウザに保存されられる

Webサイトの脆弱性のチェック方法(悪用厳禁)

HTMLのタグであるhrタグは知っていますか? 「hr」は「horizontal rule(水平方向の罫線)」の略で、水平の横線を引くためのタグです。 Webサイトのユーザが入力できる入力欄に<hr>のようなタグを投稿すると、もしユーザが入力した値に対してエスケープ処理していない脆弱性があるサイトだと『
』 と投稿後このようにタグが長い横線に変換されます。 このようなサイトに<script>タグでJavaScriptを入力して送信するとそのスクリプトがサイト上で実行されてしまうためXSSの危険があります。 逆にちゃんとエスケープ処理しているサイトだときちんと<hr>として表示され、<hr>はタグではなく文字列として扱われます。 当然JavaScriptを投稿してもそれはただの文字列として扱われるのでスクリプトが実行されることはありません。

対策方法について

対策としてはユーザが入力して投稿する値は必ずエスケープ処理をすること。 PHPにはhtmlspecialcharsという便利な関数が用意されているので、それを使います。 使用方法は ``htmlspecialchars("エスケープしたい値", ENT_QUOTES, "UTF-8");`` です。 第2引数にENT_QUOTES を指定することで、ダブルクォートだけでなくシングルクォートも変換してくれます。 ユーザ名がPOST送信された場合は以下のようにします。
$user_name = htmlspecialchars($_POST["name"], ENT_QUOTES, "UTF-8");

XSSを防ぐためにもユーザが送信した値は必ずこのようにエスケープ処理をしてください。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?