我担心安全使用函数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
)。
答案 0 :(得分:3)
¿sıɥʇǝʞıןuɐǝɯno⅄
是的,可以通过输入看起来像<{1}}的但是不同的Unicode字符来“注入”“e”字符。这种危险永远存在,任何你可能永远无法检测到类似“e”的任何字符。
虽然不知道你想要做什么,但这是不可能的。通常,这不应该与安全相关。也许提供更多背景?
答案 1 :(得分:2)
实际上,如果字符串中没有ee
完全没有出现,这意味着在兼容的编码中没有其他不可见的字符,它将不匹配。就兼容编码而言,源代码中的ee
可能是ASCII,因此任何ASCII兼容编码都可以(包括Latin-1,UTF-8和大多数单字节编码)。如果中间还有其他字符/字节,则显然不是相同的字符串且不匹配。其他相似的角色显然也不匹配。