ホームページ >バックエンド開発 >PHPチュートリアル >PHP は入力エスケープ文字を処理するコードを実装します。

PHP は入力エスケープ文字を処理するコードを実装します。

不言
不言オリジナル
2018-06-06 10:59:151980ブラウズ

この記事では主にPHPで入力エスケープ文字を処理するコードを紹介しますので、必要な方は参考にしてください

まずはWordPress 3.6で導入されたばかりの関数を見てみましょう


まず、1つのPHPについて説明しましょう。組み込み関数: get_magic_quotes_gpc()


この関数の機能は、php.ini 設定の magic_quotes_gpc オプションの値を取得することです。

magic_quotes_gpc オプションの値が On の場合、PHP パーサーは、post、get、cookie からのデータにエスケープ文字「」を自動的に追加し、これらのデータがプログラム内の特殊文字によって引き起こされる致命的な問題を引き起こさないようにします。特にデータベースステートメントの間違い。

オンにすると、一重引用符 (')、二重引用符 (")、バックスラッシュ ()、NUL (NULL 文字) などの文字がバックスラッシュされます。それ以外の場合は、addslashes() を使用して手動で処理する必要があります。値が On の場合は 1、それ以外の場合は 0 を返します

addslashes() 関数は、指定された事前定義文字の前にバックスラッシュを追加します


しかし、get_magic_quotes_gpc() は PHP5.4 以降ではキャンセルされます。関数では、将来のエラーを回避するために、すべての入力は次のようにフィルターされます:

/**
 * Add slashes to a string or array of strings.
 *
 * This should be used when preparing data for core API that expects slashed data.
 * This should not be used to escape data going directly into an SQL query.
 *
 * @since 3.6.0
 *
 * @param string|array $value String or array of strings to slash.
 * @return string|array Slashed $value
 */
function wp_slash( $value ) {
    if ( is_array( $value ) ) {
        foreach ( $value as $k => $v ) {
            if ( is_array( $v ) ) {
                $value[$k] = wp_slash( $v );
            } else {
                $value[$k] = addslashes( $v );
            }
        }
    } else {
        $value = addslashes( $value );
    }
 
    return $value;
}


mysql および GET および POST データを処理する場合、多くの場合、データの引用符をエスケープする必要があります。 PHP の設定では、' (一重引用符)、" (二重引用符)、(バックスラッシュ)、および NULL 文字を自動的に変換できます。

PHP はこれをマジック クオートと呼び、これら 3 つの設定は




magic_quotes_gpc

HTTP リクエスト データ (GET、POST、COOKIE) に影響します。実行時に変更することはできません。 PHP のデフォルト値は on です。

これをオンにすると、GET、POST、COOKIEで渡されたデータは自動的にエスケープされます。

例: test.php?id=abc'de"f

echo $_GET['id']; # これはオンになっており、書き込みには影響しません。たとえば、上記の $_GET['id'] がデータベースに書き込まれるとき、それは依然として abc'de"f,


逆に、magic_quotes_gpc=Off; の場合、文字には引用符が必要です。 (一重引用符でも二重引用符でも)、直接 mysql に書き込むと空白になります
しかし、mysql ではなくドキュメントに書き込むと、abc'de"f

magic_quotes_runtime

場合は開かれた場合、そのほとんどはデータベースやテキスト ファイルなどの外部ソースからデータを取得して返す関数は、バックスラッシュでエスケープされたデータを返します。このオプションは実行時に変更でき、PHP のデフォルト値はオフです。

magic_quotes_sybase

オンにすると、バックスラッシュの代わりに一重引用符を使用して一重引用符がエスケープされます。このオプションは、magic_quotes_gpc を完全にオーバーライドします。両方のオプションを同時にオンにすると、一重引用符は " にエスケープされます。二重引用符、バックスラッシュ、および NULL 文字はエスケープされません。
私のフォームのコンテンツは元々: 83953ac14550cb5ba108d0450c820282

eead135cc0a6fd4dacbb6e461595a9ed

対策1:php.iniファイルを変更する(php.iniの変更方法は説明しませんのでググってください)

対策2:Canceledをエスケープする

ステップ 1: $_POST['content'] などの送信したデータを見つけて、それを $content=stripslashes($_POST['content']); に変更します

ステップ 2: 今後は $ を使用して POST[' を置き換えますcontent'] with $content

ステップ 3: データベースに送信します。データベース ストレージは通常のままです:30127a9278b5b500fd6daa04d007a5ba次のようになります

”” (知っておくべきです)これを解決するにはどうすればよいでしょうか? この話はやめましょう)

ステップ 4: データベースから読み取ったコンテンツをフィルタリングするには、stripslashes() を使用します。

この関数は、addslashes() によって追加されたバックスラッシュを削除します。データベースまたは HTML フォームから取得したデータをクリーンアップするために使用されます

(

PHP ページで次のような状況を望まない場合:

一重引用符は ' としてエスケープされます

二重引用符は " としてエスケープされます

それを防ぐために次の設定を行うことができます:

php.ini で設定します: magic_quotes_gpc = Off)

概要は次のとおりです:

1. magic_quotes_gpc=on

の場合、

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

この時点で入力データに対してaddslashes()を実行する場合は、

出力時にstripslashes()を使用して余分なバックスラッシュを削除する必要があります。

2. magic_quotes_gpc=off の場合

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

関連する推奨事項:

PHP は引用符の前にバックスラッシュを追加します (PHP はバックスラッシュを削除します)



以上がPHP は入力エスケープ文字を処理するコードを実装します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。