1

タイトルはほとんどキャッチ22であることを認めますが、それは完全に関連しているので、しばらくお待ちください...

バックグラウンド

ご存知かもしれませんが、私はPHPフレームワークに取り組んでいます。その主なセールスポイントは、異なるCMS/システム間で機能をブリッジすることです。開発者の観点からは、広範なエラー処理とロギングのメカニズムがあります。現在、デバッグ出力を制御する2つの設定DEBUG_MODEとがあります。DEBUG_VERBOSE

モードは媒体を記述し、詳細は詳細の量を制御します。簡単に言うと、「コンソール」と呼ばれるモードがあり、基本的にデバッグ情報をjavascriptコンソールにダンプします(これは現在、お近くの主要なWebブラウザーで使用できます)。

問題

この[デバッグシステム]は開発サーバーには最適ですが、デバッグの詳細(DBクレデンシャルなど)が公開されるため、本番サーバーでは絶対に使用できません。そして正直なところ、開発者から移行した人は誰でしょう。製品に毎回完璧にサーバー?

ソリューション

したがって、私はこれを修正する方法を見つけようとしてきました。私が提案するソリューションには、次のものがあります。

  • リクエストが特定のIPからのものである場合にのみログを有効にするようにフレームワークに指示する設定があります。このためのセキュリティの問題は非常に明白です(とりわけIPスプーフィング)。
  • 評価されて返されるPHP式(コード)を含む設定がyes/noとして使用されます。最良の部分は、インストールされたフレームワークがCMS固有の式を提案する可能性があることです。
    • Wordpress:current_user_can('manage_options')
    • Joomla:$user=&JFactory::getUser() && ($user->usertype=='Super Administrator') || ($user->usertype=='Administrator')
    • カスタム:$_SERVER['REMOTE_ADDR']=='123.124.125.126'
  • これらは2つのうちの1つであり、私はもっと多くの提案を聞きたいと思っています。

eval()それで、あなたはそれに任せるべきだと思いますか?これをページのロード/リクエストごとに1回だけ実行することで、引き続き良好に機能することを確認します。

明確化

if(DEBUG_MODE!='none')echo 'Debug'; // this is how it is now
if(DEBUG_MODE!='none' && $USER_CONDITION)echo 'Debug'; // this is how it should be

$USER_CONDITON、実行などis_admin()、すべての管理者がデバッグ情報を表示できるようにする、またはgetUser()->id==45特定のユーザーに対してデバッグ情報を有効にするなどの機能を許可します。またはIPなどで。

ここに画像の説明を入力してください

4

4 に答える 4

3

どうぞ。架空のセキュリティへの影響を理解していることは明らかです。あなたの場合、それについてターゲットユーザーベースに伝えることが重要です。

あなたのアプローチの実行可能性に関しては、実際には議論はありません。可変認証ロジックが必要であり、それを1つの特定の環境/cmsランタイムにハードワイヤードすることはできません。

あなたが見る唯一の懸念はパフォーマンスについてです。それはバロニーです。問題ない。の存在はeval、コンパイルされた言語からスクリプト言語を識別するものです。利用可能な場合は、使用できるだけでなく、コンパイラとリンカーの実行がバックグラウンドで必要になるため、速度が低下しないようにすることができます。PHPは、トークナイザーとパーサーの初期化に時間がかかりますが、それ自体の解析は驚くほど高速です。

そして最後に、SOでそのような質問のタイトルを避けてください。;}または、少なくとも話してcreate_functionください。

于 2011-04-05T23:04:29.280 に答える
2

実際に応答を得るのに十分な長さのIPスプーフィングが発生する可能性はほとんどありません。ユーザーがサーバーへの接続を確立し、内部または特権のある開発者IPをスプーフィングしてルーターを制御している場合は、他にも心配する必要があります。

evalを実行するのではなく、匿名関数/クロージャを記述することはできません:http: //php.net/manual/en/functions.anonymous.php (Web画面ではなく構成ファイルに入れて複雑なPHPコードを記述します) Webフォームではとにかく最適ではないようです)

于 2011-04-05T22:41:22.510 に答える
2

実行されるPHPコードの自由形式の入力を許可することは、それが通過するeval()かどうかにかかわらcreate_function()ず、単に悪い設計であり、正当な理由もなく大きな潜在的な脆弱性を開きます。また、構文エラーによってページがクラッシュする可能性もあります。

管理者がプラグインをインストールできるという議論でさえ、完全には当てはまりません。XSRF攻撃は、悪意のあるものをテキストフィールド(1つの要求)に取り込むことができると考えられますが、プラグインのインストールをトリガーすることはできません。

いいえ、私はそれをしません。代わりに、各CMSブリッジをアダプターとして実装し、ユーザーが事前定義されたリストからアダプターを選択できるようにします(必要に応じて、カスタムのサニタイズ可能な設定を入力します)。(コメントで@Wrikkenによって同様のことが提案されました)

あなたに電話ですよ。この方法で問題が発生することはないでしょうeval()そして、接続するCMSのほとんど(Wordpress、Joomla)は、とにかくバックエンドでPHPコードの任意の実行を許可していると主張することができます。しかし、それは良いデザインではありません。

于 2011-04-05T22:52:02.420 に答える
0

評価されて返されるPHP式(コード)を含む設定がyes/noとして使用されます。最良の部分は、インストールされたフレームワークがCMS固有の式を提案する可能性があることです。

eval()関数が存在しない場合、または解析エラーがいくつもある場合、ページがクラッシュする可能性があります。また、ユーザーが入力した入力(URI要求など)がこれらの評価された値に触れることさえ可能にするバグが存在する場合、サイトが悪意のある、または偶発的な破壊にさらされる可能性があります。現在機能しているフレームワークを特定する代わりに、特定の定数、関数、クラスなど、ブリッジしようとしているフレームワーク内のマーカーを探します。、などを使用して、すべての関数を安全なチェックに置き換えることができeval()ます。function_exists()defined()

于 2011-04-05T22:53:49.957 に答える