0

ユーザー データを取得する関数の多くは、GET ではなくポスト経由で受け取ります。つまり、「class/method/param1/param2」などの URL で渡します。

POST データを処理する関数で最初に呼び出される静的関数を作成することをお勧めします。すなわち:

public function myMethod()
{
    Util::validatePost();
}

...

public static function validatePost()
{
    foreach($_POST as $param => $value){
      // Do some validation stuff...
    }
}
...

ルールの例として、「id」を含むキー名を持つ POST 変数は数値でなければならず、それ以外の場合は失敗するというものがあります。

4

4 に答える 4

1

多くの PHP フレームワークがそれを行います (Symfony2 は単なる例です)。

ユーザー入力を検証するために、いくつかの検証ルールと入力エスケープ機能を使用するため、ユーザーが送信するすべてを信頼するのではなく、入力を検証するためにできることはすべて行います。

さらに、静的関数 (または多くの静的関数) は、単一 (または多数) のフォームと結合されます。検証する必要があるすべてのフォーム (または一般的なデータ) に対して特定の関数を実装することをお勧めします。

注目してください

簡単にバイパスされる可能性があるため、HTML5 または JavaScript の制約を信頼しないでください。コメントで提案しているように、「最後のステップ」でユーザー入力を制御します(つまり、データをモデルまたはフォームなどにバインドする場合)

于 2013-03-20T11:38:53.077 に答える
0

それは良いアイデアです。より一般的には、クライアントからの送信を信頼することはできないため、常に確認/検証することをお勧めします。

簡単な方法でHTTPリクエストを処理するためにいくつかのPHPライブラリを使用することをお勧めします。このSymfonyコンポーネントを試してください。例: https ://github.com/symfony/HttpKernel

于 2013-03-20T11:47:18.210 に答える
0

次のようないくつかの理由から、それは良い考えではないと私は主張します。

  • コードとの間に強い依存関係が生じ、エラーやデバッグの苦痛が生じる余地があります。
  • 特に php は型キャストが難しいです。すべてのポスト変数は、最初は文字列として到着することに注意してください。また
  • 必要な検証の種類は、常に使用法によって異なります。突然どこかに文字列 ID ができたらどうしますか?

もちろん、実行できる検証がいくつかあります。たとえば、PHP モジュール suhosin (AKA hardened php) は、攻撃を防ぐためにそれを行います。

ただし、私の経験では、ユーザー データが処理される時点でクリーンアップすることをお勧めします。

たとえば、データベース クエリで使用するデータには常に引用を適用します。Alawys、クエリが構築される直前。

そもそもデータの安全性に頼ることはありません。

また、いかなる場合でも、外部ソースから提供されたデータを決して信頼しないでください。

あなたがそれをするとき、あなたがそれをするときにそれが正しいことを常に検証してください。

于 2013-03-20T11:40:36.777 に答える
0

これは悪い考えだと思います。これは最初は非常にうまくいくかもしれませんが、常にこれに非常に厳密である必要があり、経験から、ID フィールドの命名ではなく、常に数値でなければならない変数になることを学びました。

また、おそらくもっと多くの検証が必要です (有効な電話番号、メールアドレス、郵便番号、または有効な GUID など)。

最終的には、何かを行う前に各パラメーターを検証する必要があるため、これは役に立たないようです。

于 2013-03-20T11:43:21.457 に答える