ホームページ > バックエンド開発 > PHPチュートリアル > PHPエスケープの本当の意味を正しく理解する_PHPチュートリアル

PHPエスケープの本当の意味を正しく理解する_PHPチュートリアル

WBOY
リリース: 2016-07-15 13:32:25
オリジナル
778 人が閲覧しました

正しい理解方法

PHPにはデフォルトで「マジッククォート」スイッチがあり、このスイッチがオンになっていると、外部から転送された$_GET、$_GET、$COOKIEがPHPによってエスケープされます。例:

http://localhost/test.PHP?test=1'

test.PHP の出力時に自動的にエスケープされます。出力は次のようになります。

var_dump($_GET['test'];

===== ===output=======

string(3) "1'"

表示' 記号が追加され、エスケープされました。しかし、ここに問題があります。この値は Web ページに出力されます。画面がいっぱいの場合は、別の関数であるストリップスラッシュを使用して画面を削除できます。

マニュアルでの PHP エスケープは、効率性を考慮して「マジック クォート」をオンにしないことをお勧めします。問題がありますが、これには利点もあります。つまり、私のような初心者にとっては非常に安全です。

これは、PHP の実行中に閉じることができないため、3 つの方法があります。 、ini_set() は使用できません。

1. PHP.ini を設定します

magic_quotes_runtime = Off

magic_quotes_sybase = Off

2. システムを変更できない場合は、.htaccess

PHP_flag magic_quotes_gpc を使用できます。 Off

3. 最も効率の悪いPHPエスケープ方法

<ol class="dp-xml">
<li class="alt"><span><span>if (get_magic_quotes_gpc()) {  </span></span></li>
<li><span>function stripslashes_deep($value)  </span></li>
<li class="alt"><span>{  </span></li>
<li>
<span>$</span><span class="attribute">value</span><span> = </span><span class="attribute-value">is_array</span><span>($value) ?  </span>
</li>
<li class="alt"><span>array_map('stripslashes_deep', $value) :  </span></li>
<li><span>stripslashes($value);  </span></li>
<li class="alt"><span>return $value;  </span></li>
<li><span>}  </span></li>
<li class="alt">
<span>$</span><span class="attribute">_POST</span><span> = </span><span class="attribute-value">array_map</span><span>('stripslashes_deep', $_POST);  </span>
</li>
<li>
<span>$</span><span class="attribute">_GET</span><span> = </span><span class="attribute-value">array_map</span><span>('stripslashes_deep', $_GET);  </span>
</li>
<li class="alt">
<span>$</span><span class="attribute">_COOKIE</span><span> = </span><span class="attribute-value">array_map</span><span>('stripslashes_deep', $_COOKIE);  </span>
</li>
<li><span>}  </span></li>
<li class="alt">
<span class="tag">?></span><span> </span>
</li>
</ol>
ログイン後にコピー

SQL文中にLIKEがある場合の%の処理については、addslashesは%_をエスケープしませんし、これらの2文字はエスケープしません。他の SQL ステートメントではエスケープする必要があるため、LIKE ステートメントがある場合にのみ使用される関数 like_esc( $value) をコンパイルしました。

Web ページへの出力には、最初にストリップスラッシュを使用し、次に htmlspecialchars を使用してエスケープします。

これで、すべての転送に適用される、比較的怠惰な PHP エスケープ メソッドができました。すべてエスケープされました。

<ol class="dp-xml">
<li class="alt"><span><span>if (!get_magic_quotes_gpc()) {  </span></span></li>
<li><span>function addslashes_deep($value)  </span></li>
<li class="alt"><span>{  </span></li>
<li>
<span>$</span><span class="attribute">value</span><span> = </span><span class="attribute-value">is_array</span><span>($value) ? array_map('addslashes_deep', $value) : addslashes($value);  </span>
</li>
<li class="alt"><span>return $value;  </span></li>
<li><span>}  </span></li>
<li class="alt">
<span>$</span><span class="attribute">_POST</span><span> = </span><span class="attribute-value">array_map</span><span>('addslashes_deep', $_POST);  </span>
</li>
<li>
<span>$</span><span class="attribute">_GET</span><span> = </span><span class="attribute-value">array_map</span><span>('addslashes_deep', $_GET);  </span>
</li>
<li class="alt">
<span>$</span><span class="attribute">_COOKIE</span><span> = </span><span class="attribute-value">array_map</span><span>('addslashes_deep', $_COOKIE);  </span>
</li>
<li><span>}  </span></li>
</ol>
ログイン後にコピー


http://www.bkjia.com/PHPjc/446125.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/446125.html技術記事 PHP にデフォルトでマジック クオート スイッチがあることを正しく理解する方法。このスイッチがオンになっている場合、外部から転送される $_GET、$_GET、$COOKIE が PHP によってエスケープされます。例: http://localhost/。テスト...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート