[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("&", "&amp;", $str);
    $str = str_replace("<", "&lt;", $str);
    $str = str_replace(">", "&gt;", $str);
    $str = str_replace("'", "&#39;", $str);
    $str = str_replace('"', "&quot;", $str);
    return $str;
}

実はこれで完璧ではありませんが,多くのケースで十分です。

これもテストしてません。ミスあるかもしれません。

-- 
まつなみ <mat@abelia.ocn.ne.jp>