PHP str_replace绕过

时间:2012-07-02 07:58:23

标签: php str-replace

我担心安全使用函数str_replace。 E.G。

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

是否可以通过多字节字符集或空字符绕过(获取“abcdeefghij” - 带有2个'e'字母)?

编辑: 我正在考虑这样的事情:abcd%6565fghij%6565将被ee取代,但str_replace无效,因为它是多字节字符串(mb_str_replace)。

2 个答案:

答案 0 :(得分:3)

  

¿sıɥʇǝʞıןuɐǝɯno⅄

是的,可以通过输入看起来像<{1}}的但是不同的Unicode字符来“注入”“e”字符。这种危险永远存在,任何你可能永远无法检测到类似“e”的任何字符。

虽然不知道你想要做什么,但这是不可能的。通常,这不应该与安全相关。也许提供更多背景?

答案 1 :(得分:2)

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