[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 メーリングリストの案内