好的,我有一些用户输入,我做了一个 echo str_replace('<', '<', str_replace('&','&',$_POST['input']));
我想知道,无论如何用户是否可以破坏此过滤器?
最初我认为这个脚本非常安全,但在阅读了一些关于 php、字符集和安全性的文章后我开始怀疑它的健壮性。
最佳答案
这取决于输入的最终位置。
例如,如果在某个时候你最终得到了一个像这样构造的(糟糕的)模板......
<a href="<?php echo $somevar; ?>">a link</a>
然后有人可以通过简单地使用以下输入来注入(inject)代码:
javascript:do_whatever()
即使输出通常不会回显到 href
字段中,像这样...
<a title="<?php echo $somevar; ?>" href="http://www.google.com">Google</a>
如果输入是...,仍然可能存在漏洞
" href="javascript:do_whatever()
所以基本上...过滤器必须对使用它们的上下文敏感。一个常用的函数是htmlspecialchars()
它处理许多常见情况。
关于php - str_replace ('<' ) 可以保护我们免受用户注入(inject)代码的侵害吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7749249/