仅供参考,我不会考虑使用 stripcslashes,因为它也可能导致 XSS。
让我解释一下:
stripslashes vs stripcslashes
stripslashes 删除所有反斜杠,无论类型如何
stripcslashes 将删除除十六进制字符之外的所有反斜杠,因此这意味着您可以通过执行以下操作对使用 stripcslashes 的函数执行 XSS 攻击:
\\x3c\\x73\\x63\\x72\\x69\\x70\\x74\\x3e\\x61\\x6c\\x65\\x72\\x74\\x28\\x27\\x58\\x53\\x53\\x21\\x27\\x29\\x3b\\x3c\\x2f\\x73\\x63\\x72\\x69\\x70\\x74\\x3e
当由 stripcslashes 函数评估时,将导致:alert('XSS!');
这实际上是我在一个流行的 Wordpress 插件中发现的一个漏洞(Platinum SEO <= 1.3.7)
只需确保在使用它们之前对正在使用的功能进行研究,因为您可能会导致比其价值更多的问题。
这也适用于您对addcslashes () 的使用,因为您可以强制它评估您不想要的代码,如下所示:
$>php -r 'echo addcslashes("\x41", "A..z");'
\A
这是一个用于格式错误的 XSS 字符串的基本示例:
> php -r 'echo addcslashes("\x3c\x73\x63\x72\x69\x70\x74\x3e\x61\x6c\x65\x72\x74\x28\x27\x58\x53\x53\x21\x27\x29\x3b\x3c\x2f\x73\x63\x72\x69\x70\x74\x3e", "/");'
<script>alert('XSS!');<\/script>
如您所见,这仍然会执行警报。
正如 mehaase 所证实的,如果不使用 include()、require()、eval()、system() 之类的东西,就不可能调用 PHP 代码(如果您在用户输入上使用 system(),您会更加担心PHP 任意代码执行)。