ホームページ  >  記事  >  バックエンド開発  >  php_PHP チュートリアルでの magic_quotes_gpc 関数の使用例

php_PHP チュートリアルでの magic_quotes_gpc 関数の使用例

WBOY
WBOYオリジナル
2016-07-20 10:59:221429ブラウズ

magic_quotes_gpc メソッドは、php.ini の設定に基づいて生成されます。その機能は、addlashes と同じです。 ​

thinksaas ソース コードの一部を読んだ後、$_POST/$_GET からのデータ処理メソッドは関数 Add_S() を通じて実行されることがわかりました。つまり、環境では Magic_quotes_gpc がデフォルトで有効になっていないため、送信されたデータはaddslashes() によって処理されます。

私は、magic_quotes_gpc についていつも混乱していました。以前、magic_quotes_gpc について「magic_quotes_gpc とaddslashes() の正しい関係は?」という記事も公開しました。 》, このことを徹底的に理解したいので、今もう一度この問題について話します。thinksaas 公式ウェブサイトでこの質問を送信し、その時点で結果をこの記事に更新する予定です。 。
質問1: データ内のデータを今読み取る場合、読み取り後にstripslashes()を処理して元のデータの状態に戻す必要がありますか?

質問 2: 他の多くのプログラムはこれを逆に処理しているようです。つまり、環境が magic_quotes_gpc をオンにしている場合、送信されたデータに対してstripslashes() が実行され、その後データに対して htmlspecialchars() が実行されて特殊記号が置き換えられます。 , この方法とthinksaasではどちらの方法が良いのでしょうか?今後、magic_quotes_gpc はデフォルトで有効にならないと聞きました。

Typecho 機関車公開インターフェイス、質問 2 の方法を使用して投稿データを処理します。それが最適な方法かどうかはわかりません。

送信されたデータに対してstripslashes()を実行し、次にデータに対してhtmlspecialchars()を実行します。この方法には利点がないと思います。それでもTSよりは良いです。 Weibo やフォーマットの少ない特別な Web サイトの場合は、単に addlashed() してデータベースに直接保存するのが最善だと思います。
質問 1 には誰も回答しませんでしたが、magic_quotes_gpc がオンになっているかどうかに関係なく、データを保存するときに余分なバックスラッシュが追加されないため、データを読み取った後にstripslashes() 処理を実行する必要はありません。 。

magic_quotes_gpc の概要

1.治療方法

方法1: システム環境でmagic_quotes_gpcが有効になっていない場合、送信されたデータに対してaddslashes()処理を実行します。
方法 2: システム環境で magic_quotes_gpc が有効になっている場合は、送信されたデータに対してstripslashes() 処理を実行し、最後にデータに対して htmlspecialchars() 処理を実行して特殊記号を削除します。

2. 兄弟が言ったように、単純な保存の場合は、addslashed() を実行してから保存するのが最善の方法です。通常、文字列を保存する前に、magic_quotes_gpc を削除する必要があります。が自動的に追加され、処理後、addslashed() または htmlspecialchars() によって処理され、最終的にデータベースに保存されます。一般的にはそうなのですが、実態に応じて柔軟に方法を採用する必要があります。

2012-10-21更新

最善の方法は、magic_quotes_gpc によって自動的に追加されたバックスラッシュを削除してから、データベース操作クラスで、すべての操作を最初にデータベースに追加し、次にデータベースに追加することです


それでは、公式の運用内容を見てみましょう


まずは説明書に書いてあることを見てみましょう!

ほとんどの人は、最初の 2 つの段落だけ読んでください

魔法の名言

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

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

3 つの魔法の引用ディレクティブがあります:

magic_quotes_gpc

コード:

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

コード:

有効にすると、データベースやテキスト ファイルなど、外部ソースからデータを返すほとんどの関数で引用符がバックスラッシュでエスケープされます。実行時に設定でき、PHP ではデフォルトでオフになります。
magic_quotes_sybase

コード:

有効にすると、一重引用符はバックスラッシュではなく一重引用符でエスケープされます。オンの場合、両方のディレクティブが有効になると、一重引用符、バックスラッシュ、および NULL のみがそのまま残ります。そして逃げられない
魔法の引用を使用する理由

1 初心者にも役立つ

初心者が作成したコードが危険でないようにマジック クォートが PHP に実装されていますが、マジック クォートをオンにしても SQL インジェクションは可能ですが、リスクは軽減されます。

2利便性

データベースにデータを挿入する場合、マジック クオートは基本的にすべての Get、Post、Cookie データに対して addslashes() を実行し、これを自動的に実行します。

魔法の引用を使用しない理由


1携帯性

コード:
これがオンかオフかは、移植性に影響を与えると仮定して、 get_magic_quotes_gpc() を使用してこれを確認し、それに応じてコーディングします。 2パフォーマンス

コード:

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

コード:
すべてのデータをエスケープする必要があるわけではないため、エスケープすべきでない場所にエスケープされたデータが表示されると煩わしいことがよくあります。たとえば、フォームからメールを送信する場合、メール内に ' が大量に表示されると、これを修正するにはストリップスラッシュ() が必要になる場合があります。 ).

これらの英語の単語は、私のような人には十分な忍耐力が必要です (私に忍耐力があるということではなく、私の英語が下手なだけです)。先ほども言いましたが、一般の人は、特に The Words を使用するときは、最初の 2 つの段落だけを読んでください。赤くハイライトされています! ! !



get_magic_quotes_gpc

PHP環境変数magic_quotes_gpcの値を取得します。

構文:long get_magic_quotes_gpc(void);

戻り値: 長整数

関数の種類: PHPシステム関数

コンテンツの説明

この関数は、PHP環境に設定されている変数magic_quotes_gpc(GPC、Get/Post/Cookie)の値を取得します。 0 を返すとこの機能がオフになることを意味し、1 を返すとこの機能がオンになることを意味します。 magic_quotes_gpc が有効な場合、すべての ' (一重引用符)、" (二重引用符)、'' (バックスラッシュ)、およびヌル文字は、バックスラッシュを含むオーバーフロー文字に自動的に変換されます。

スラッシュを追加 -- バックスラッシュを使用して文字列を引用します


説明

文字列はスラッシュを追加します (文字列 str)

データベースクエリステートメントなどの目的で、特定の文字の前にバックスラッシュを追加した文字列を返します。これらの文字は、一重引用符 (')、二重引用符 (")、バックスラッシュ ('')、および NUL (NULL 文字) です。

addslashes() の使用例は、データベースにデータを入力する場合です。たとえば、O'reilly という名前をデータベースに挿入するには、エスケープする必要があります。ほとんどのデータベースでは、エスケープ文字として '' を使用します (O'''reilly)。これにより、余分な '' を挿入せずにデータがデータベースに保存されます。 PHP ディレクティブ magic_quotes_sybase が on に設定されている場合、' の挿入は ' でエスケープされることを意味します。

デフォルトでは、PHP 命令 magic_quotes_gpc がオンになっており、主にすべての GET、POST、COOKIE データに対してaddslashes() が自動的に実行されます。 magic_quotes_gpc によってエスケープされた文字列に対して addslashes() を使用しないでください。二重エスケープが発生するためです。この状況が発生した場合は、関数 get_magic_quotes_gpc() を使用して検出できます。

例 1.addslashes() の例

コードは次のとおりです

コードをコピー// 出力: あなたの名前はオライリーですか? エコーはスラッシュを追加します($str); この関数は、PHP 環境設定の変数 magic_quotes_gpc (GPC、Get/Post/Cookie) の値を取得します。 0 を返すとこの機能がオフになることを意味し、1 を返すとこの機能がオンになることを意味します。 magic_quotes_gpc がオンになっている場合、すべての ' (一重引用符)、" (二重引用符)、'' (バックスラッシュ)、およびヌル文字はバックスラッシュを含むオーバーフロー文字に自動的に変換されます。
$str = "あなたの名前はオライリーですか?";
?>



get_magic_quotes_gpc()

コードは次のとおりです

コードをコピー関数html($str) { $str;を返します }
$str = get_magic_quotes_gpc()?$str:addslashes($str);



要約は次のとおりです:

1. PHP の場合、magic_quotes_gpc=on、

入出力データベースの文字列データでは何もできません
addslashes() およびtripslashes() の操作では、データは通常どおり表示されます。

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

2. PHPのmagic_quotes_gpc=offの場合

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


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/445614.html技術記事 magic_quotes_gpc メソッドは、php.ini の設定に基づいて生成されます。その機能は、addslashes と同じです。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。