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

PHPデータフィルター関数_PHPチュートリアル

Jul 13, 2016 am 10:36 AM
php 使用 関数 変数 私たち 提出する データ データベース 時間 フィルター

1. PHP 送信データフィルタリングの基本原則

1) 変数をデータベースに送信するときは、フィルター処理にaddlashes()を使用する必要があります。たとえば、注入の問題は1つのaddslashes()で解決できます。実際、変数値に関しては、 intval() 関数も文字列のフィルタリングに適しています。

2) php.iniでmagic_quotes_gpcとmagic_quotes_runtimeを有効にします。 magic_quotes_gpc は、get、post、cookie の引用符をスラッシュに変更できます。 magic_quotes_runtime は、データベースに出入りするデータの書式設定の役割を果たします。実際、このパラメータは、インジェクションが夢中になっていた昔から非常に人気がありました。

3) システム関数を使用する場合は、安心してシステム関数を使用できるように、escapeshellarg()、escapeshellcmd() パラメータを使用してフィルタリングする必要があります。

4) クロスサイトの場合は、strip_tags() と htmlspecialchars() の 2 つのパラメータが良く、ユーザーが送信した html と php のタグが変換されます。たとえば、山括弧「<」は「<」などの無害な文字に変換されます。

コードは次のとおりです
$new = htmlspecialchars("テスト", ENT_QUOTES);
ストリップタグ($text,);

5) 関連する関数のフィルタリングについては、先ほどの include()、unlink、fopen() などと同様に、操作したい変数を指定するか、関連する文字を厳密にフィルタリングすればよいと思います。完璧になります。

2. PHPによる簡単なデータフィルタリング

1)ストレージ:trim($str),addslashes($str)

2) 出力:stripslashes($str)

3) 表示: htmlspecialchars(nl2br($str))

dispatch.php スクリプトの詳細については、以下の例を参照してください:

コードは次のとおりです

/* グローバルセキュリティ処理 */

スイッチ ($_GET['タスク'])
{
ケース「print_form」:
'/inc/presentation/form.inc' を含めます;
休憩;

ケース「プロセスフォーム」:
$form_valid = false;
'/inc/logic/process.inc' を含めます;
if ($form_valid)
{
'/inc/presentation/end.inc' を含めます;
}
それ以外
{
'/inc/presentation/form.inc' を含めます;
}
休憩;

デフォルト:
'/inc/presentation/index.inc' を含めます;
休憩;
}

?>

これが公的にアクセス可能な唯一の PHP スクリプトである場合、そのプログラムは、最初のグローバル セキュリティ処理がバイパスできないように設計されていると確信できます。また、開発者は特定のタスクの制御フローを簡単に確認できます。たとえば、コード全体を閲覧しなくても簡単にわかります。$form_valid が true の場合、end.inc は process.inc がインクルードされる前であり、false に初期化されたばかりであるため、ユーザーに表示される唯一のものです。 process.inc の内部ロジックによって true に設定されると判断できます。それ以外の場合は、フォームが再度表示されます (関連するエラー メッセージが表示される可能性があります)。

注意

(dispatch.php ではなく)index.php などのディレクトリ指定のファイルを使用する場合は、http://example.org/?task=print_form のように URL アドレスを使用できます。

ApacheForceType リダイレクトまたは mod_rewrite を使用して、URL アドレス http://example.org/app/print-form を調整することもできます。

メソッドが含まれます

もう 1 つの方法は、すべてのセキュリティ処理を担当する単一のモジュールを使用することです。このモジュールは、すべてのパブリック PHP スクリプトの先頭 (または最先頭) に含まれています。以下の security.inc スクリプトを参照してください

コードは次のとおりです

スイッチ ($_POST['form'])
{
ケース「ログイン」:
$allowed = array();
$allowed[] = 'フォーム';
$allowed[] = 'ユーザー名';
$allowed[] = 'パスワード';

$sent = array_keys($_POST);

if ($allowed == $sent)
{
'/inc/logic/process.inc' を含めます;
}

休憩;
}

?>

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

コードは次のとおりです
<フォームアクション="/receive.php"メソッド="POST">

ユーザー名:


パスワード:



$allowed という配列は、フォームが処理される前に、どのフォーム変数が許可されているかを確認するために使用されます。プロセス制御は何を実行するかを決定し、実際のフィルター処理されたデータは process.inc に到着します。

注意

security.inc が常にすべてのスクリプトの先頭に含まれるようにするより良い方法は、auto_prepend_file 設定を使用することです。

フィルタリングの例

ホワイトリストの確立はデータフィルタリングにとって非常に重要です。遭遇する可能性のあるすべてのフォーム データの例を示すことは不可能なので、いくつかの例は一般的な理解を得るのに役立ちます。

次のコードは電子メール アドレスを検証します:

コードは次のとおりです

$clean = array();

$email_pattern = '/^[^@s<>]+@([-a-z0-9]+.)+[a-z]{2,}$/i';

if (preg_match($email_pattern, $_POST['email']))
{
$clean['email'] = $_POST['email'];
}

?>

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

コードは次のとおりです

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

$clean = array();

スイッチ ($_POST['color'])

{
ケース「レッド」:
ケース「グリーン」:
ケース「ブルー」:
$clean['color'] = $_POST['color'];
休憩;
}

?>

コードは次のとおりです

$clean = array();

if ($_POST['num'] == strval(intval($_POST['num'])))

{
$clean['num'] = $_POST['num'];
}

?>

次のコードは、$_POST['num'] が浮動小数点数 (float) であることを確認します。

コードは次のとおりです

$clean = array();

if ($_POST['num'] == strval(floatval($_POST['num'])))

{

$clean['num'] = $_POST['num'];
}

?>

名前変換

これまでのすべての例では、配列 $clean を使用しました。これは、開発者がデータに潜在的に脆弱性があるかどうかを判断するための良い方法です。 データを検証した後は、決して $_POST または $_GET にデータを保存しないでください。開発者は、スーパー グローバル配列に保存されたデータを常に完全に疑う必要があります。

追加する必要があるのは、$clean を使用すると、フィルターされていないものについて考えるのに役立ち、ホワイトリストの役割に近いということです。セキュリティレベルを向上させることができます。

検証済みのデータのみを $clean に保存する場合、データ検証における唯一のリスクは、参照する配列要素が存在しないことであって、フィルターされていない危険なデータではありません。

タイミング

PHP スクリプトの実行が開始されると、すべての HTTP リクエストが終了したことになります。この時点では、ユーザーがスクリプトにデータを送信する機会はありません。したがって、(register_globals がオンになっている場合でも) スクリプトにデータを入力することはできません。このため、変数を初期化することは非常に良い方法です。

抗注射

コードは次のとおりです

//PHP サイト全体のアンチインジェクション プログラム、このファイルをパブリック ファイルに require_once する必要があります
//magic_quotes_gpc ステータスを決定する
if (@get_magic_quotes_gpc ()) {
$_GET = 秒 ( $_GET ); $_POST = 秒 ( $_POST ); $_COOKIE = 秒 ( $_COOKIE ); $_FILES = 秒 ( $_FILES ); }
$_SERVER = 秒 ( $_SERVER ); 関数 sec(&$array) {
// 配列の場合は、配列を走査して再帰的に呼び出します
if (is_array ( $array )) {
foreach ( $array as $k => $v ) {
$array [$k] = 秒 ( $v ); }
} else if (is_string ( $array )) {
//addslashes関数を使って処理します
$array = ラッシュを追加します ( $array ); } else if (is_numeric ( $array )) {
$array = 整数 ( $array ); }
$配列を返す
}
//整数フィルター関数
関数 num_check($id) {
if (! $id) {
die ( 'パラメータを空にすることはできません!' ); } //空かどうかを判断する
else if (inject_check ( $id )) {
die ('不正なパラメータ' ); } //判定を注入する
else if (! is_numetic ( $id )) {
die ('不正なパラメータ' ); }
//数値判定
$id = 整数 ( $id ); //整数化
$id を返す
}
//文字フィルター関数
関数 str_check($str) {
if (inject_check ( $str )) {
die ('不正なパラメータ' ); }
// 判定を注入する
$str = htmlspecialchars ( $str ); //HTMLを変換する
$str を返します。 }
関数 search_check($str) {
$str = str_replace ( "_", "_", $str ); //「_」をフィルターで除外します
$str = str_replace ( "%", "%", $str ); //「%」を除外します
$str = htmlspecialchars ( $str ); //HTMLを変換する
$str を返します。 }
//フォームフィルター関数
関数 post_check($str, $min, $max) {
if (isset ( $min ) && strlen ( $str ) < $min) {
die ('最小 $min バイト'); } else if (isset ( $max ) && strlen ( $str ) > $max) {
die ('$max バイトまで'); }
ストリップスラッシュ配列を返します ( $str ); }
//アンチインジェクション関数
関数 inject_check($sql_str) {
return eregi ( 'select|inert|update|delete|'|/*|*|../|./|UNION|into|load_file|outfile', $sql_str ); // www.111cn.net フィルタリングとインジェクション防止用
}
関数tripslashes_array(&$array) {
if (is_array ( $array )) {
foreach ( $array as $k => $v ) {
$array [$k] = ストリップスラッシュ_配列 ( $v ); }
} else if (is_string ( $array )) {
$array = ストリップスラッシュ ( $array ); }
$配列を返す
}
?>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/737681.html技術記事 1. PHP 送信データのフィルタリングの基本原則 1) データベースに変数を送信するときは、addslashes() を使用してフィルタリングする必要があります。たとえば、挿入の問題は 1 つの addslashes() だけで解決できます。それは...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP データベースの操作 CakePHP データベースの操作 Sep 10, 2024 pm 05:25 PM

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

CakePHP のロギング CakePHP のロギング Sep 10, 2024 pm 05:26 PM

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

See all articles