- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPの機能制限)
PHPの機能制限について
このQ&Aのポイント
- PHPの機能制限について考える場合、変数、配列、連想配列、for文、if文、foreach文、replace系関数、match系関数、split関数、explode関数の使用を許可し、他の関数の実行を制限したいという要件があります。
- そういった要件を満たすためには、PHPの上で動く独自のミニ言語を作ることが必要となるでしょう。このミニ言語では、制限された機能のみを使用できるようにするため、replaceやmatchを駆使して必要な機能を実現します。
- ただし、smartyなどのテンプレートエンジンは本来の用途とは異なるため、思わぬ事故が起きる可能性があります。そのため、できるだけ使用を控えることをおすすめします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
自前サーバーでphp.iniがいじれるなら 利用関数を制限する設定があるけど http://jp.php.net/manual/ja/ini.core.php#ini.disable-functions black list としては exec や system やinclue requireも入れたいけど、そうしたら受け取ったソースを実行できない。実行できるようにしたら、かなりの抜け穴作っちゃう、かなり大量に関数をリストしないといけない。 ってことで、やはり使える関数をwhite list して、書式も一行に一式とか制限加えて、送ってきたデータを正規表現などでチェック(preg_match_all など利用)するようにするのがいいでしょう。 質問文に上げられてる程度なら、white list チェックできそうな気はしますが、ループ処理とか、入れ子のチェックは、再帰関数など、いろいろアルゴリズムを駆使する必要はありそうです。 関数電卓程度なら、探せば参考になるソースもあるかも。
お礼
おおお、こんな設定がphpiniに存在するのですね まさに私の求めている機能でした、驚きです 仰るとおり、enableであればこのまま使えそうでしたが disableだと抜け穴が出来そうで怖いですね javascriptで記述して、サーバ側の解釈にPhantom JSを使うという手も思いつきましたが Phantom JSの機能もすべてを理解している訳ではないので結局は抜け穴が心配という結論になりました やはり、PHP上に独自のミニ言語を作って、それを正規表現でパースする形で実現するのが、すべてのソースを把握できるので安全・確実ですね。 ユーザーには、大変ですがその記述を覚えてもらいます 回答ありがとうございます! 一応あと3日質問を開いておきます!