ホームページ > バックエンド開発 > PHPチュートリアル > php の少しの理解と分析 magic_quotes_gpc_PHP チュートリアル

php の少しの理解と分析 magic_quotes_gpc_PHP チュートリアル

WBOY
リリース: 2016-07-21 15:50:55
オリジナル
871 人が閲覧しました

blankyao さんは、「学習のプロセスは常に間違いを発見し、常に修正することです

まずマニュアルに書かれていることを読みましょう!」

一般の方は、最初の 2 つの段落だけ読んでください

Magic Quotes

コード:
Magic Quotes は、受信データを PHP スクリプトに自動的にエスケープするプロセスです。マジック クオートをオフにしてコーディングし、代わりにデータをエスケープすることをお勧めします。必要に応じて、実行時に
マジッククオートとは


コード:
オンの場合、すべての ' (一重引用符)、" (二重引用符)、(バックスラッシュ) および NULL 文字は自動的にバックスラッシュでエスケープされます。これは同じです。

3 つのマジック クォート ディレクティブがあります:
magic_quotes_gpc

コード:
HTTP リクエスト データ (GET、POST、および COOKIE) に影響します。実行時に設定することはできません。PHP ではデフォルトで on になります。 magic_quotes_runtime

コード:
有効にすると、データベースやテキスト ファイルを含む、外部ソースからデータを返すほとんどの関数で引用符がバックスラッシュでエスケープされます。
magic_quotes_sybase

ではデフォルトでオフになります。コード:
有効な場合、単一引用符はバックスラッシュではなく単一引用符でエスケープされます。オンの場合、両方のディレクティブを有効にすると、単一引用符のみが '' としてエスケープされます。
マジッククォートを使用する理由




1 初心者に役立つ

マジッククォートは、初心者が書いたコードを危険から守るためにPHPに実装されていますが、マジッククォートを使用してもSQLインジェクションは可能です。リスクが軽減されます。

2便利です

データベースにデータを挿入する場合、マジック クオートは基本的にすべての Get、Post、Cookie データに runlashes() を追加します。


マジック クォートを使用しない理由




1 移植性

コード:
on か off であると仮定して、get_magic_quotes_gpc() を使用してこれを確認し、それに応じてコードを作成します。
2 パフォーマンス

コード:
エスケープされたデータのすべてが挿入されるわけではないため。データベースにこのデータをすべてエスケープすると、パフォーマンスが低下します。実行時にエスケープ関数 (addslashes() など) を呼び出す方が効率的です。ただし、php.ini-dist はデフォルトでこれらのディレクティブを有効にします。 -recommended はこれを無効にします。この推奨事項は主にパフォーマンス上の理由からです。
3 不便

コード:
すべてのデータをエスケープする必要がないため、たとえば、フォームからメールを送信する場合などに、エスケープされたデータが表示されると煩わしいことがよくあります。修正するには、stripslashes() を過剰に使用する必要があるかもしれません。これらの英語の単語には、私のような人には十分な忍耐力が必要です (私に忍耐力があるわけではありませんが、私の英語は下手です)。 , 先ほども言いましたが、一般の人は最初の2段落、特に赤で強調した単語だけ読んでください! ! !

さらに、$_GET、$_POST、$_COOKIE を渡すときにマジック クオートが有効になるという事実に特別な注意が払われます

以下の場合があります

コード:
1
条件: magic_quotes_gpc=off
書かれた文字列データベースへ いかなる方法でもフィルタリングされていません。データベースから読み取られた文字列は一切処理されません。

データ: $data="snow''''sun"; (snow と sun の間には 4 つの連続した一重引用符があります)

操作: 文字列「snow''''sun」をデータベースに書き込みます

結果: SQL ステートメントエラーが発生し、mysql は SQL ステートメントを正常に完了できず、データベースへの書き込みに失敗しました。

データベース保存形式: データがありません。

出力データ形式: データなし。

注: 未処理の一重引用符は、データベースに書き込まれるときに SQL ステートメントでエラーを引き起こします。

コード:
2.
条件: magic_quotes_gpc=off
データベースに書き込まれた文字列は関数addslashes()によって処理されます。データベースから読み取られた文字列は一切処理されません。

データ: $data="snow''''sun"; (snow と sun の間には 4 つの連続した一重引用符があります)

操作: 文字列「snow''''sun」をデータベースに書き込みます

結果: SQL ステートメントはスムーズに実行され、データはデータベースに正常に書き込まれました

データベース保存形式: Snow''''sun (入力と同じ)

出力データ形式: Snow''''sun (同じinput)

説明:addlashes() 関数は、SQL ステートメントが正常に実行できるように単一引用符をエスケープ文字に変換します。
ただし、データベースはデータとして保存しません。これは私たちが想像していたものではありません。snow''''sun

コード:
3.
条件: magic_quotes_gpc=on
データベースに書き込まれた文字列はまったく処理されていません。データベースから読み取られた文字列は一切処理されません。

データ: $data="snow''''sun"; (snow と sun の間には 4 つの連続した一重引用符があります)

操作: 文字列「snow''''sun」をデータベースに書き込みます

結果: SQL ステートメントはスムーズに実行され、データはデータベースに正常に書き込まれました

データベース保存形式: Snow''''sun (入力と同じ)

出力データ形式: Snow''''sun (同じinput)

説明: magic_quotes_gpc=on は、SQL ステートメントが正常に実行できるように単一引用符をエスケープ文字に変換します。
ただし、データベースは、snow ''''sun をデータとして保存します。私たちは雪を想像しました。

コード:
4.
条件: magic_quotes_gpc=on
データベースに書き込まれた文字列は関数 addlashes() によって処理されます。データベースから読み取られた文字列は一切処理されません。

データ: $data="snow''''sun"; (snow と sun の間には 4 つの連続した一重引用符があります)

操作: 文字列「snow''''sun」をデータベースに書き込みます

結果: SQL ステートメントはスムーズに実行され、データはデータベースに正常に書き込まれました

データベース保存形式: Snow''''sun (エスケープ文字が追加されました)

出力データ形式: Snow''''sun (エスケープ文字)追加) 意味文字)

説明: magic_quotes_gpc=on は、SQL ステートメントが正常に実行できるように、一重引用符を 'エスケープ文字に変換します。
addslashes は、データベースに書き込もうとしている一重引用符を ' に変換し、後者の変換が書き込まれます。
Database として、データベースは Snow''''sun を保存します
概要は次のとおりです:

1. magic_quotes_gpc=on の場合、

文字列に対して
addslashes() およびtripslashes() を実行することはできません。データベース操作によるデータの入出力では、データは正常に表示されます。

この時点で入力データに対してaddslashes()を実行する場合は、
出力時にstripslashes()を使用して余分なバックスラッシュを削除する必要があります。

2. magic_quotes_gpc=off

の場合、入力データを処理するためにaddslashes()を使用する必要がありますが、addslashes()はバックスラッシュを一緒に書き込まないため、出力をフォーマットするためにstripslashes()を使用する必要はありません。これは、mysql が SQL ステートメントの実行を完了するのに役立つだけです。

追加:

magic_quotes_gpc アクションの範囲: WEB クライアント サーバー、アクション時間: スクリプトの実行時など、リクエストの開始時。
magic_quotes_runtime スコープ: ファイルから読み取られたデータ、または exec() の実行結果、または SQL クエリから取得されたデータ; アクションの時間: スクリプトが実行状態で生成されたデータにアクセスするたび

http://www.bkjia.com/PHPjc/319284.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/319284.html技術記事ブランキャオ氏は、「学習のプロセスは常に間違いを発見し、常に修正することです。まずマニュアルに書かれていることを見てみましょう。」と述べました。 一般の方は、最初の 2 段落だけ読んでください。Magic Quot...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート