XSSの説明としてフォームに関することがよく挙げられます。
外部からの入力は、必ず汚染されているものだという前提で処理を行う必要があります。
xss.php
xss.phpにはクロスサイトスクリプティングに対する処理が行われていないので、
xss.php?入力=<script>○○
等と好き放題行えます。
このことに関する記事はちょっと探せば大量に出てきます。
さて、xssのチェックを行う関数xss_check()を実装したとして、以下のような処理を行ってみます。
http://hogehoge.com/a.php
xss_check関数で問題が無ければok.phpを呼び出し、駄目であればng.phpを呼び出すという処理です。
ok.php内では$dataを画面表示したりDBに登録したりする処理を行っています。
見た目もわかりやすいですし入力値のチェックも行っているので問題ないように見えます。
ところでincludeは外部サーバのファイルも取得することが出来ます。
下のコードをちょっと見てください。
http://xxxxxx.com/b.php
何のチェックも通さずにok.phpが実行されてしまいました。
b.phpのカレントディレクトリはxxxxx.comになるので、
hogehoge.comがカレントディレクトリという前提で動いているa.phpは、大抵の場合動作しません。
しかしchdir等でうまく場所を合わせられたり、a.phpが外部からincludeされる前提で作成されたりしていた場合など、
動いてしまう可能性も0ではありません。
もちろんb.phpを動かすためにはa.phpの構造を知らないといけないので
そう簡単に出来るわけではありませんが、
外部から操作できるという点では明らかにセキュリティホールになり得ます。
この手の情報ってあんまり見たことないんですが気のせい?
外部からの入力は、必ず汚染されているものだという前提で処理を行う必要があります。
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
トラックバック
トラックバックURL: