web-dev-qa-db-ja.com

PHPデータベース内:悪い習慣ですが

SQLにphpを置くことは危険ですであるため、ビューのカスタムphpフィールド、フィルターなどを使用することは悪い習慣であると何度も言われました。

私の質問は、モジュールで定義した関数を呼び出すだけの場合でも、それでも悪いのですか

場合によっては、特にビューの場合、カスタムハンドラーや他の例ではカスタムトークンを作成すると、非常に負荷がかかることがあります。
関数のみを呼び出すカスタムフィールドを作成すると、どのようなリスクがありますか?危険で「禁じられている」のでしょうか?

4

これが私の見解です。

PHP docsは eval について述べています:

その使用はお勧めできません

alwaysですが、もう一度強調しておきますが、always、PHP =モジュール(技術的にはevalですが、PHPモジュールは危険な言語機能をはるかに悪化させます)。

この質問で説明されている詳細: PHPブロック、ノード、ビュー、引数などのフィルターコード)を使用することの欠点は何ですか?

Cliveの主張が提供するリンク

時々evalが唯一の/正しい解決策です。

これが真実である場合もありますが、かなりの数年間の専門能力開発の間に、私はneverで実際のニーズに遭遇しましたPHPまたは他の言語。

個人的には、サーバーがphpレベルの機能をdisable_functions = evalで無効にするレベルにしました。

そうは言っても、小さな個人のWebサイトでは、大企業のWebサイトよりも影響が少ない可能性が高く、少なくとも完全に恐ろしいものではない場合があります。

8
Letharion

ここにはいくつかの素晴らしい答えがありますが、CMS内でphpを実行できるようにすることはセキュリティの問題であるため、なぜに対処できないと思います。

私の意見では、php.moduleや独自の評価を行う他のモジュールの問題は、Drupalサイトを利用できるようにすることです(を参照) note)は、任意のphpを実行する機能を備えています。現在進行中の WordPressブルートフォース 攻撃は、WordPressサイト。サイトを改ざんするだけの能力を誰かに与えた場合、それは厄介な問題ですが、それ以上ではありません。任意のphpを実行する能力を与えた場合(通常はそれを行います)、それはそれらにとって恐ろしいことですサイト、同じサーバー上でホストされている他のサイト、さらにはインターネット全体でさえ、これらのサイトは、所有者が望むすべてを実行できる巨大なボットネットになります。

WordPressがphpの実行を許可しなかった場合、それはこの攻撃の価値ある標的になるでしょうか?おそらくそうではありません。

それで、あなたは何ができますか? letharionのdisable_functionsに関するヒントは素晴らしいものです。 パラノイアモジュール もあります。これは、phpを実行する人々の能力を減らすのに役立ちます。

  • 注:かなり一般的な「Drupalサイトを利用する」と言いました。これは、ブルートフォースで管理者パスワードを強制し、ソーシャルエンジニアリングでメールにアクセスし、パスワードリセットメールを実行し、セッションスニッフィングを行うことで可能です。 、XSS攻撃、または他のいくつかの方法ですが、攻撃者がそのような攻撃を行うと、eval機能はサーバー全体が攻撃者にとって優れたツールになることを意味します。
6
greggles

無効なPHPコードをフォームのtextareaに追加すると、致命的なエラーでサイトがオフラインになる可能性があります。また、機能が追加されていない場所を特定できない場合、ソースコードファイルであり、代わりにあいまいなデータベースフィールドにあります。

モジュールで定義された関数を呼び出す方が簡単ですが、ソースコードを適切に追跡できますが、そうする場合は、機能などのモジュールを使用してこれらのビューなどをエクスポートして保存することをお勧めします。コードはバージョン管理で適切に追跡できます。

ほとんどの場合、同等のAPIがあり、PHPコードのほうが適切です。たとえば、hook_block_viewやカスタムViews引数ハンドラーなどです。

3
David Thomas