[PHP-users 3818] Re: phpでの標準出力のhtml ファイルへの保存
まつなみ
php-users@php.gr.jp
Sun, 25 Nov 2001 02:33:43 +0900
まつなみです。
ozeki> 今回、知りたかったのはこれです。こういった方法が出来ないかと考えて
ozeki> いました。
私は殆どのケースをこのパターンで処理してます。
mat> $html = str_replace("!name_here!", $name, $html);
mat> $html = str_replace("!age_here!", $age, $html);
mat> $html = str_replace("!tel_here!", $tel, $html);
ただしセキュリティ上注意すべきポイントがあります。
ブラウザから入力する文字列が$nameに入るとします。
このとき$nameに次のような文字列が入ったらどうなるでしょうか?
<SCRIPT>alert('Hello!');</SCRIPT>
JavaScriptが埋め込まれてしまいます。
これはクロスサイトスクリプティングという攻撃手法です。
クッキーが盗まれてしまうという危険性で有名です。
とりあえず簡単な対策をご紹介します。
$html = str_replace(...の直前に次のようなコードを入れます。
$name = sanitize($name);
$age = sanitize($age);
$tel = sanitize($tel);
function sanitize($str)
{
$str = str_replace("&", "&", $str);
$str = str_replace("<", "<", $str);
$str = str_replace(">", ">", $str);
$str = str_replace("'", "'", $str);
$str = str_replace('"', """, $str);
return $str;
}
実はこれで完璧ではありませんが,多くのケースで十分です。
これもテストしてません。ミスあるかもしれません。
--
まつなみ <mat@abelia.ocn.ne.jp>