0

関数 の安全な使用について懸念がありますstr_replace。例えば

$var = "abcdeefghij";
$var = str_replace("ee", "", $var); // Should be "abcdfghij"

たとえば、マルチバイト文字セットまたはヌル文字でこれをバイパスする (「abcdeefghij」を取得する - 2 つの「e」文字を使用) ことは可能ですか?

編集: 次のようなことを考えていました: abcd%6565fghij %6565 は ee に置き換えられますstr_replaceが、マルチバイト文字列 ( mb_str_replace) であるため機能しません。

4

2 に答える 2

3

¿sıɥʇ ǝʞıן uɐǝɯ no⅄</p>

はい、似ているが別の Unicode 文字を入力することで、「e」文字を「注入」できる場合がありますe。その危険性は常に存在し、 「e」に似た文字を検出できない可能性があります。

あなたが何をしようとしているのかを知らなくても、それが実際の問題であるかどうかを判断することは不可能です. 通常、これはセキュリティ関連ではありません。たぶん、もう少し背景を提供しますか?

于 2012-07-02T08:04:46.703 に答える
2

実際、ee文字列内で正確にそのように発生しない場合、つまり、互換性のあるエンコーディングで、追加の非表示文字がない場合、一致しません。互換性のあるエンコーディングに関する限りee、ソース コードでは ASCII である可能性が高いため、ASCII と互換性のあるエンコーディングであれば何でも構いません (Latin-1、UTF-8、およびほとんどのシングルバイト エンコーディングを含む)。間に他の文字/バイトがある場合、それは明らかに同じ文字列ではなく、一致しません。他のそっくりな文字も明らかに一致しません。

于 2012-07-02T08:06:45.783 に答える