PHPバイナリセキュリティの説明

WBOY
リリース: 2016-06-23 13:15:21
オリジナル
904 人が閲覧しました

説明1:

PHPには文字列という概念があります。

文字列では、各文字のサイズはバイトです(PHPと比較すると、Javaの各文字はUTF8文字であるCharacterであり、C言語の各文字はコンパイル時に選択できます)。
バイトには、ABC、123、abc などの ASCII コード文字と、キャリッジ リターン、バックスペースなどのいくつかの特殊文字があります。
表示できない特殊文字が多数あります。つまり、表示方法に標準はありません。たとえば、コード 65 からは文字 A が使用され、コード 97 からは文字 a が使用されます。バックスペースは、ある場所では記号として表示され、ある場所では記号として表示されます。実際には前の文字を置き換えます。1 つの文字が返されます。
PHPはCベースなので、Cと比較する記述が多いです。 C 文字列では、文字列をコード 0 で終了するのが古典的な定義です。したがって、このような文字列を想定すると、その中の 3 文字のエンコーディングはそれぞれ 97、0、97 になります。次に、C の str_replace に相当する関数があり、それを使用して 97 を 98 に置き換えることができる場合、この関数が 0 を読み取ると終了とみなされ、98,0,97 が得られます。同様に、PHP の str_replace はバイナリ セーフであるため、この 0 は特別な終了記号とは見なされず、結果は 98, 0, 98 になります。
【バイナリセキュリティ】PHPドキュメントでは、基本的にこれを意味します:C言語の同様の機能を持つ関数は一部の文字を特別に処理しますが、PHPのこの関数はすべての文字を同等に扱うため、特殊文字が影響することを心配する必要はありません特に 0 文字のエンコードについては心配する必要はありません。

説明 2:

c の strlen 関数は、特殊文字に依存しているため、バイナリ セーフではありません。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート