[PHP-users 18526]Re: 変数に格納したヒアドキュメント(解
Kenji Ono
ono @ fjct.fujitsu.com
2003年 10月 20日 (月) 15:03:00 JST
小野といいます。
PHP側に望むのは厳しいのかも知れませんが、この手の関数は拡張子が
PHPのみ、なんてできないのでしょうか。
そうすると今回の件も大丈夫なような気がします。
それとも、そんな事すると利用価値がなくなるのでしょうか。
JavaのClassクラスでクラスをインスタンス化できますが、これはJava
ファイルしかできなかったと思います。
これに匹敵するものがPHPでも欲しいものです。
今は以下のようにしてますけど・・・
===> hoge.php
class hogehtml {
function hoge_head() { print "<html><body>" ; }
function hoge_foot() { print "</body></html>" ; }
}
class hoge extends hogehtml {
$data;
function setBody($p_data) { $data = $p_data }
function printBody() {
hoge_head();
print $data ;
hoge_foot();
}
}
===> hogemain.php
$classname = $_GET['key'] ; <=== hoge.php が来たとする
p = new $classname ;
p->setBody('hogehogehoge');
p->printBody();
> Subject : [PHP-users 18522] Re: 変数に格納したヒアドキュメント(解
> From : Shuhei Tomita <tomita @ zingy.or.jp>
> Date : Mon, 20 Oct 2003 14:05:22 +0900
>:Snip
>
> たとえば、こんなテンプレート展開処理を用意してみました。
>
> <?
> //$_GET['key'] = stripslashes($_GET['key']);
> //magic_quote_gpcがonの場合は上の行をアンコメント
> $template = <<<HTML
> 入力文字列は {$_GET['key']} です
> HTML;
> ?>
> <html>
> <body>
> <?eval('echo "$template";') ?>
> </body>
> </html>
>
> ここに、$_GET['key']に、
> '.exit().'
> が入力されていると何が起きるのでしょうか。exit()の代わりに、
> system(something..)が入力されていると何が起きるのでしょうか。私は恐ろし
> くて口に出す事さえできません。興味のある方は是非各自のテスト環境でお試し
> ください。
>
> #"超"古典的セキュリティホールの一例です。
> #[PHP-users 18514]にもうなづけます。
>
> 注意:上記のコードを公開されたWebサーバにおいてはいけません。
PHP-users メーリングリストの案内