ホームページ > バックエンド開発 > PHPチュートリアル > PHPデータフィルタリング方法_PHPチュートリアル

PHPデータフィルタリング方法_PHPチュートリアル

WBOY
リリース: 2016-07-13 10:25:43
オリジナル
989 人が閲覧しました

ガイドの冒頭で、データ フィルタリングは、あらゆる言語およびプラットフォームにおける WEB アプリケーション セキュリティの基礎であると述べました。これには、アプリケーションへのデータ入力とアプリケーションからのデータ出力の検証が含まれます。優れたソフトウェア設計は、開発者が次のことを行うのに役立ちます。
データ フィルタリングが回避できないことを確認する、
違法な情報が正当な情報に影響を与えないことを確認する、
識別するデータのソース。
データ フィルタリングをバイパスできないようにする方法についてはさまざまな見解があり、そのうちの 2 つは他の見解よりも一般的であり、より高いレベルの保証を提供します。
スケジュール方法
この方法は、単一の PHP スクリプト (URL 経由) でスケジュールされます。他の操作は、必要に応じて include または require を使用して含められます。このアプローチでは通常、各 URL にディスパッチ用の個別の GET 変数を渡す必要があります。この GET 変数は、スクリプト名を置き換えるより単純化された設計と考えることができます。例:
http://a.org/dispatch.php?task=PRint_formdispatch.php は唯一のルート ファイル (ドキュメント ルート) です。これにより、開発者は 2 つの非常に重要な作業を行うことができます:
dispatch.php の先頭にいくつかのグローバル セキュリティ処理を実装し、これらの処理がバイパスできないようにします。
特に一部の特殊な目的の制御フロー操作において、データ フィルタリングを実行する必要がある場所を簡単に判断できます。
dispatch.php スクリプトの詳細については、次の例を参照してください:
これが公的にアクセス可能な唯一の PHP スクリプトである場合は、次のことを確認してください。このプログラムの設計により、最初のグローバル セキュリティ処理がバイパスできないことが保証されているということです。また、開発者は特定のタスクの制御フローを簡単に確認できます。たとえば、コード全体を閲覧しなくても簡単にわかります。$form_valid が true の場合、end.inc は process.inc がインクルードされる前であり、false に初期化されたばかりであるため、ユーザーに表示される唯一のものです。 process.inc の内部ロジックによって true に設定されると判断できます。それ以外の場合は、フォームが再度表示されます (関連するエラー メッセージが表示される可能性があります)。
注意
(dispatch.php ではなく)index.php などのディレクトリ指定のファイルを使用する場合は、http://a.org/?task=print_form のような URL アドレスを使用できます。
ApacheForceType リダイレクトまたは mod_rewrite を使用して、URL アドレス http://a.org/app/print-form を調整することもできます。
含まれるメソッド
もう 1 つの方法は、すべてのセキュリティ処理を担当する単一のモジュールを使用することです。このモジュールは、すべてのパブリック PHP スクリプトの先頭 (または最先頭) に含まれています。次のスクリプトを参照してください security.inc

コードをコピーします コードは次のとおりです:



この例では、送信された各フォームには一意の検証値フォームが含まれているとみなされ、security.inc は必要なフォームのデータを個別に処理します。フィルタリングされる。この要件を実装する HTML フォームは次のとおりです:
コードをコピーします コードは次のとおりです:

ユーザー名:

パスワード:



$allowed という配列はチェックに使用されますどのフォーム変数が許可されるか、このリストはフォームが処理される前に一貫している必要があります。プロセス制御は何を実行するかを決定し、実際のフィルター処理されたデータは process.inc に到着します。
注意
security.inc が常にすべてのスクリプトの先頭に含まれるようにするより良い方法は、auto_prepend_file 設定を使用することです。
フィルタリングの例
ホワイトリストの確立はデータフィルタリングにとって非常に重要です。遭遇する可能性のあるすべてのタイプのフォーム データの例を示すことは不可能であるため、いくつかの例は一般的な理解を助けることができます。
次のコードはメール アドレスを検証します:
コードをコピーします コードは次のとおりです:



次のコードは、$_POST['color'] の内容が赤、緑、または青であることを確認します:
コードをコピーします コードは次のとおりです:

[/code]
次のコードは、$_POST['num'] が整数であることを確認します。
[code]


以下のコード$_POST['num'] が float であることを確認します:
コードをコピーします コードは次のとおりです:



名前変換
前の各例で使用した配列$クリーン。これは、開発者がデータが侵害される可能性があるかどうかを判断するための良い方法です。 データを検証した後は、決して $_POST または $_GET にデータを保存しないでください。開発者は、スーパー グローバル配列に保存されたデータを常に完全に疑う必要があります。
$clean を使用すると、フィルタリングされていないものについて考えるのに役立ち、ホワイトリストの役割に似ていることを付け加えておきます。セキュリティレベルを向上させることができます。
検証済みのデータを $clean に保存するだけの場合、データ検証における唯一のリスクは、フィルターされていない危険なデータではなく、参照する配列要素が存在しないことです。
タイミング
PHP スクリプトの実行が開始されると、すべての HTTP リクエストが終了したことになります。この時点では、ユーザーがスクリプトにデータを送信する機会はありません。したがって、(register_globals がオンになっている場合でも) スクリプトにデータを入力することはできません。このため、変数を初期化することは非常に良い方法です。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/824954.html技術記事ガイドの冒頭で、データ フィルタリングは、あらゆる言語およびプラットフォームにおける WEB アプリケーション セキュリティの基礎であると述べました。これには、アプリケーションへのデータ入力とアプリケーションからのデータ出力の検証が含まれます...
関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート