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>

是的,可以通过输入一个看起来e但不同的Unicode字符来“注入”一个“e”字符。这种危险始终存在,您可能永远无法检测到任何类似于“e”的字符。

尽管不知道您要做什么,但无法判断这是否是实际问题。通常,这不应该与安全相关。也许提供更多背景?

于 2012-07-02T08:04:46.703 回答
2

实际上,如果ee字符串中没有以这种方式出现,这意味着在兼容的编码中并且没有额外的不可见字符,它将不匹配。就兼容编码而言,ee您的源代码中可能是 ASCII,因此任何 ASCII 兼容编码都可以(包括 Latin-1、UTF-8 和大多数单字节编码)。如果中间有其他字符/字节,它显然不是同一个字符串并且不会匹配。其他相似的字符显然也不匹配。

于 2012-07-02T08:06:45.783 回答