ホームページ  >  記事  >  バックエンド開発  >  PHP でよく使用されるエスケープ文字関数

PHP でよく使用されるエスケープ文字関数

WBOY
WBOYオリジナル
2016-07-25 08:54:121090ブラウズ
この記事では、PHP で一般的に使用される文字エスケープ関数とセキュリティ関数を紹介します。これらの関数は、SQL インジェクションなどの最も一般的な攻撃方法をフィルタリングするために使用できます。

このセクションの内容: PHPエスケープ文字関数の使用法。

1.スラッシュを追加します addlashes は、(')、(")、()、(NUL) の 4 文字を含む、SQL ステートメント内の特殊文字をエスケープします。この関数は、DBMS に独自のエスケープ関数がない場合に使用されますが、DBMS に独自のエスケープ関数がある場合に使用されます。たとえば、MySQL には SQL をエスケープするための mysql_real_escape_string 関数があり、PHP5.3 より前では、magic_quotes_gpc がデフォルトで有効になっており、主に $GET、$POST、および $COOKIE に対してラッシュを実行することに注意してください。ただし、最新バージョンの PHP を使用している場合、magic_quotes_gpc は PHP5.3 で廃止され、PHP5.4 以降は削除されました。この質問はaddslashesのエスケープ関数です。

2.html特殊文字 htmlspecialchars は、(&)、(‘)、(")、(

) の 5 文字を含む、HTML 内のいくつかの特殊文字を HTML エンティティ (形式: &xxxx;) にエスケープします。 & (AND) => & " (二重引用符) => " (ENT_NOQUOTES が設定されていない場合) ' (シングルクォーテーション) => ' (ENT_QUOTES が設定されている場合) (大なり記号) => > htmlspecialchars を使用すると、$GET、$POST、$COOKIE データをフィルタリングして XSS を防ぐことができます。 htmlspecialchars 関数は、セキュリティ上のリスクがあると考えられる HTML 文字のみをエスケープすることに注意してください。HTML でエスケープできるすべての文字をエスケープしたい場合は、htmlentities を使用してください。 htmlspecialchars_decode は htmlspecialchars のデコード関数です。

3.htmlエンティティ htmlentities は、HTML 内のエスケープ可能なコンテンツを HTML エンティティにエスケープします。 html_entity_decode は htmlentities のデコード関数です。

4.mysql_real_escape_string mysql_real_escape_string は、MySQL ライブラリ関数 mysql_real_escape_string を呼び出して (x00)、(n)、(r)、()、(‘)、(x1a) をエスケープします。つまり、SQL インジェクションを防ぐために前にバックスラッシュ () を追加します。データベース データを読み取るときにエスケープを解除するためにストリップスラッシュを呼び出す必要はないことに注意してください。これらのバックスラッシュはデータベースが SQL を実行するときに追加され、バックスラッシュはデータがデータベースに書き込まれるときに削除されるためです。は元のデータであり、前にバックスラッシュはありません。

5. ストリップタグ Strip_tags は、NUL、HTML、および PHP タグをフィルターで除外します。

6. 結論 PHP に付属するセキュリティ機能では XSS を完全に回避することはできません。HTML Purifier を使用することをお勧めします。

PHPエスケープの使い方を詳しく解説

PHPのデータのマジッククオート関数magic_quotes_gpcまたはmagic_quotes_runtime オンに設定すると、引用するデータに一重引用符、二重引用符、およびバックスラッシュが含まれる場合、バックスラッシュが自動的に追加され、記号が自動的に変換され、データ操作が正しく行われるようになります。 2 つの違い: magic_quotes_gpc アクションの範囲は次のとおりです。 WEB クライアント サーバー。 いつ: リクエストは、たとえばスクリプトの実行時などに開始されます。 magic_quotes_runtime スコープの範囲: ファイルから読み取られたデータ、exec() の実行結果、または SQL クエリから取得されたデータ。 アクションのタイミング: スクリプトが実行状態で生成されたデータにアクセスするたび。 見てわかるように magic_quotes_gpc の設定値は、Get/Post/Cookie によって取得されるデータに影響します。 magic_quotes_runtime の設定値は、ファイルから読み取られるデータ、またはデータベース クエリから取得されるデータに影響します。 関連付けるいくつかの関数: set_magic_quotes_runtime(): magic_quotes_runtime 値を 0=off に設定します。デフォルトの状態は、echo phpinfo() を通じて確認できます。 get_magic_quotes_gpc(): magic_quotes_gpc 値を表示します。0=off.1=on get_magic_quotes_runtime(): magic_quotes_runtime 値を確認してください。 0=オフ、1=オン。 set_magic_quotes_gpc() 関数がないことに注意してください。つまり、プログラム内で magic_quotes_gpc の値を設定することはできません。 2 つの値の設定の問題により、プログラミング中に混乱が生じたり、余分なエスケープが追加されたりする可能性があります。この場合は、プログラムの開始時またはデフォルト設定で設定および判断する必要があります。 両方の値がオフになっています。エスケープ部分はプログラムによって実行されます。 データが正常に挿入されることを保証するために、データを読み取るときは通常、addslashes を使用して処理し、多くの場合、stripslashes を使用して追加されたバックスラッシュを削除します。 PHPの同様の文字変換関数

addslashes は、によって指定された定義済み文字の前にバックスラッシュを追加します。 ストリップスラッシュは、addslashes() 関数によって追加されたバックスラッシュを削除します htmlspecialchars は、いくつかの事前定義された文字を HTML エンティティに変換します htmlspecialchars_decode は、いくつかの事前定義された HTML エンティティを文字に変換します html_entity_decode() は HTML エンティティを文字に変換します htmlentities() 文字を HTML エンティティに変換します


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