忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2024/04/19 21:04 |
PHP0-1:これもXSSになるのかなあ?
XSSの説明としてフォームに関することがよく挙げられます。
外部からの入力は、必ず汚染されているものだという前提で処理を行う必要があります。

xss.php
<?php
print($_GET['入力'])
?>

xss.phpにはクロスサイトスクリプティングに対する処理が行われていないので、
  xss.php?入力=<script>○○
等と好き放題行えます。

このことに関する記事はちょっと探せば大量に出てきます。


さて、xssのチェックを行う関数xss_check()を実装したとして、以下のような処理を行ってみます。

http://hogehoge.com/a.php
$data=$_GET['data']
$check=xss_check($data);

if($check=='OK'){
  include_once 'ok.php';
}else{
  include_once 'ng.php';
}

xss_check関数で問題が無ければok.phpを呼び出し、駄目であればng.phpを呼び出すという処理です。
ok.php内では$dataを画面表示したりDBに登録したりする処理を行っています。
見た目もわかりやすいですし入力値のチェックも行っているので問題ないように見えます。

ところでincludeは外部サーバのファイルも取得することが出来ます。
下のコードをちょっと見てください。

http://xxxxxx.com/b.php
$data='危険なコード';

  include_once 'http://hogehoge.com/ok.php';

何のチェックも通さずにok.phpが実行されてしまいました。

b.phpのカレントディレクトリはxxxxx.comになるので、
hogehoge.comがカレントディレクトリという前提で動いているa.phpは、大抵の場合動作しません。
しかしchdir等でうまく場所を合わせられたり、a.phpが外部からincludeされる前提で作成されたりしていた場合など、
動いてしまう可能性も0ではありません。

もちろんb.phpを動かすためにはa.phpの構造を知らないといけないので
そう簡単に出来るわけではありませんが、
外部から操作できるという点では明らかにセキュリティホールになり得ます。


この手の情報ってあんまり見たことないんですが気のせい?
PR


2008/04/14 18:59 | Comments(0) | TrackBack() | PHP

トラックバック

トラックバックURL:

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<その他1-2:セキュリティ対策2:SQLインジェクション | HOME | その他1-1:セキュリティ対策1:クロスサイトスクリプティング>>
忍者ブログ[PR]