2012-03-23 8 views
-3

データベースにPHPコードが格納されていますが、取得する際に実行する必要があります。データベースからコードを実行しています

私のコードは、主にエコー ""で使用されるHTMLとPHPの組み合わせです。

私のコードのように見えるサンプル:

echo "Some Text " . $var['something'] . " more text " . $anotherVar['something2']; 

どのように私はDBにデータを追加する場合echo"";持つか、それなしのいずれかのようなコードを実行することができます。

アイデア?

UPDATE:私は言及を忘れてしまった

、私はデータの安全性を確保するために、サーバー上で施行され、イントラネットおよびセキュリティに使用されるウェブサイト上でこれを使用しています。

+2

通常、HTMLコードやPHPコードをDBに格納するのは悪い考えです。 PHPコードは単に文字列連結ですか?おそらく正規表現を使って変数名をその値に置き換えることができます。 –

+3

うわー、どうやってデータベースに格納して実行する必要があるのでしょうか?大きな設計上の欠陥のように聞こえる。 –

+0

@Rocket HTMLでもOKです。 –

答えて

1

eval()関数を使用します。

HERESにいくつかの情報

http://www.php.net/manual/en/function.eval.php

の線に沿って何か:

eval($yourcode); 

それは最後の手段である場合、あなたはそれが何とハッカーの愛を評価するとして、それが安全になりたいですそれ。 Suhosinや他の道を見て、これを生産に確保してください。

+0

eval =悪ですが、これはOPの問題を解決する唯一の方法と思われます... –

2

evalを参照してください。 PHPを含む文字列を渡して、ファイルに直接書き込んだかのように実行できます。

実行可能なPHPをデータベースに格納するのは一般的ではありません。同じコードをデータベースの静的データに適用するのではなく、そのコピーを多数保持する方が意味があるように、あなたが実際に格納するコードは異なりますか? evalの使用は、メンテナンスの問題につながる可能性があるため、しばしば悪い習慣とみなされます。回避する方法があれば、通常はそれに相当します。

3

これは悪い考えではなく、ハッキングの試行のいくつかのタイプへの招待でもあります。

eval()とすることができます。決してそれを使用しないでください。 eval()は、任意のPHPコードを実行できるため、非常に危険です。したがってその使用はお勧めしません。このコンストラクトを使用する以外の選択肢がないことを慎重に確認した場合は、あらかじめ適切に検証することなく、ユーザーが提供したデータを渡すことに注意してください。

+0

これを維持する別の方法がありますが、それは維持する頭痛です、また、技術者以外のユーザーはできません使用する。 – sikas

+1

詳細を教えてください。私はその方法について知りたい。 –

16

私は今、データベース

STOPに保存されたPHPコードを持っています。
コードをデータベースから移動します。
コードデータにもう一度混ぜてはいけません。

$code_str = "echo 'Im executed'"; 
eval($code_str); 

をしかし、これは安全ではないことに注意を払う:

+0

あなたの名前まで暮らすために+1、LOL – Rooster

+0

@あなたの常識:私はイントラネット上でこのウェブサイトを使用しています。だから、私はこれが問題ではないと信じています。また、私は実行される混合コードでデータベースを更新するページを持っています。これはbtnクリックで構築されるため、ユーザー入力は強制されません。 – sikas

+2

oh。 「ユーザー入力なし」に関する文章は面白いものです –

1

あなたはeval()関数でコードを実行することができます誰かがあなたのデータベースにアクセスを取得するならば、彼はあなたのサーバー上で任意のコードを実行することができるようになります

0

Evalは明らかに安全ではありません。

IMO

  1. あなたがつかむ準備ができているとき、ストアドプロシージャを実行して、テーブルに

  2. をあなたのデータを保存し、みんななどのデータ

+0

私はあなたを得ていませんでした。詳しく教えてください。 – sikas

1

プロセスの最適ルートeval()を使用して示されたdは、あなたの必要性に対して悪いアプローチです。しかし、ホワイトリストアプローチを使用することで、ほぼ同じ結果を得ることができます。

  • たとえば、db_driven_functions.phpというファイルを作成します。 dbからデータを取得します。そして

// $ sql_fn_parameters [0] =関数名

// $ sql_fn_parameters [1,2,3 .....] =関数は

パラメータ以下のように配列にそれらをマッピング
  • 次に、これらは

    PHPコードblocks.forインスタンスが含まれる関数を定義その機能は、
function_exists("$sql_fn_parameters[0]") 

  • コール機能

    0定義されている場合
  • 次いで制御した後、関数名

  • を含むデータをプル

    call_user_func_array()またはcall_user_func()

を(任意のあなたも。配列$ sql_sourced_pa​​rameters_arrayは、よりセキュリティのためのあらゆる危険な構文が含まれていないパラメータをフィルタリングすることができる)そして、あなたのコードはリスクなしデシベルから制御する必要があり。

少し長いようですが、実装した後は、管理パネルによるPHPフローの使用が本当にうれしいです。

しかし、このような構造をOOPで構築することは、長期的には優れています。 (クラスの自動ロードなど)

+0

関数のパラメータをdbに格納するには、serialize()およびunserialize()を使用して、これをstandartdizedにすることもできます –

0

この方法でデータベースを悪用するべきではありません。一般的に、動的コードの実行は悪い考えです。 SmartyまたはXSLTのようなテンプレートエンジンを使用して、この問題に対するより洗練されたソリューションを採用することができます。

関連する問題