php - str_replace ('<' ) 可以保护我们免受用户注入(inject)代码的侵害吗?

标签 php javascript security xss

好的,我有一些用户输入,我做了一个 echo str_replace('<', '&lt;', str_replace('&','&amp;',$_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/

相关文章:

php - 使用 jquery 传递并获取 php url 参数,无需重新加载页面

javascript - ngTables 中的 Angular 自定义过滤

javascript - GraphQL:在文件上传期间解决 promise 时出错

用于检查列入黑名单的 IP 地址的 API?

php - 为什么用它的散列作为 salt 返回散列的字符串散列?

php - 无法在智能手机中获取文件的 tmp_name ($_FILES)

php - 正则表达式:除特定字符外的所有 ASCII 字符(PHP、FILTER_VALIDATE_REGEXP)

php - 如何根据特定的设定规则创建唯一的字母数字代码?

javascript - 如何在打开另一个 div 之前隐藏一个 div?

security - Grails 安全过滤除一项之外的所有操作