記事見出し索引

クライアント・サイド・スクリプト : PHP

クライアント・サイド・スクリプト埋め込み攻撃(Script Insersion)の覚書。

クライアント・サイド・スクリプト埋め込み攻撃とは

悪意のある攻撃者が外部リクエストとして不正なクライアントスクリプト(Javascript)を送信すること。HTMLフォームの入力データにJavaScriptを埋め込む等。

クライアント・サイド・スクリプト埋め込み攻撃への対策

外部リクエストの利用場所で対策が変わってくる。

通常の場所

htmlspecialchars
関数でHTML出力用サニタイズを行う。HTMLの出力時に行うことに注意する。具体的には、外部リクエストとして送信された値のなかで、HTMLのタグの区切り文字として特別な意味をもつ<,>などをhtmlspecialchars関数をつかってHTMLのタグの区切り文字としての意味をもたないHTMLエンティティ>や$ltなどに変換する。

$data = $_POST['someone']; // $dataの値は<script> Javascriptコード </script>とする
$data = htmlspecialchars($data,ENT_QUOTES); // $gt;script< ..... $gt;/script$lt;と変換される
print($data);

HTMLサニタイズにより$dataを表示してもJavascriptは実行されない。

htmlspecialcharsでHTMLエンティティへ変換される文字は下記の通りである(PHPマニュアルより
)。

‘&’ (アンパサンド) は ‘&’ になります。
ENT_NOQUOTES が設定されていない場合、 ‘”‘ (ダブルクォート) は ‘”‘になります。
ENT_NOQUOTES が設定されている場合のみ、 ”’ (シングルクオート) は ”’になります。
‘<’ (小なり) は ‘<’ になります。
‘>’ (大なり) は ‘>’ になります。

URLが記述可能な場所

具体的な記述可能な個所

<a href="<?php echo $url ?>">リンク</a>
<form action="<?php echo $url ?>" method="get">.....
<img src="<?php echo $url ?>" />
<meta http-equiv="refresh" content="3; url="<?php echo $url ?>" />

対策

preg_replace関数を使ってHTMLサニタイズを行う。

>$url = $_POST['url'];
preg_replace('/javascript/i','',preg_replace('/[\x00-\x20\x22\x27]/','',$url));
<a href="<?php echo $url ?>">リンク</a>

上記コードは最初に外部リクエスト$urlに含まれる制御コード及びシングルクウォート,ダブルクウォートを空文字へ置き換える。さらに変換した値のなかのjavascriptという文字列を空文字へ置き換えることによってJavascriptを無害化する。
※iにより変換対象のjavascriptという文字列は大文字と小文字を区別なく空文字に置き換える。
※\x00~\x20は制御コード(\x00はNULL) \x22=>”,\x27=>’

  このページの上へ

スポンサード リンク

  Yahoo!ブックマークに登録    Google  この記事をクリップ!  BuzzurlにブックマークBuzzurlにブックマーク

2008/9/2 火 | PHP, security | 固定リンク | コメント (0)

コメントはまだありません。

コメントの投稿

改行と段落タグは自動で挿入されます。メールアドレスは表示されません。利用可能な HTML タグ: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

(必須)

(必須)


トラックバックURL

このページの上へ移動