Php strip_tags()是否容易受到脚本攻击?

Php strip_tags()是否容易受到脚本攻击?,php,html,security,xss,strip-tags,Php,Html,Security,Xss,Strip Tags,是否存在已知的XSS或其他攻击使其通过 $content = "some HTML code"; $content = strip_tags($content); echo $content; ? 该系统有一个警告: 此函数不修改允许使用允许的_标记的标记上的任何属性,包括恶意用户在发布将显示给其他用户的文本时可能滥用的style和onmouseover属性 但这仅与使用允许的\u标记参数有关 如果未设置允许的标签,strip_tags()是否容易受到攻击 似乎在说它是安

是否存在已知的XSS或其他攻击使其通过

$content = "some HTML code";
$content = strip_tags($content);

echo $content;
?

该系统有一个警告:

此函数不修改允许使用允许的_标记的标记上的任何属性,包括恶意用户在发布将显示给其他用户的文本时可能滥用的style和onmouseover属性

但这仅与使用
允许的\u标记
参数有关

如果未设置允许的标签
strip_tags()
是否容易受到攻击

似乎在说它是安全的:

使用成熟的解决方案

如果可能,使用成熟的现有解决方案,而不是尝试创建自己的解决方案。strip_tags()和htmlentities()等函数是不错的选择

这是正确的吗?如果可能的话,请引用来源

我知道HTML净化器、htmlspecialchars()等-我不是在寻找清理HTML的最佳方法。我只是想知道这个具体问题。这是一个理论问题


参考资料:

如果您所做的只是将文本输出到html正文,那么Strip标记是完全安全的


将其放入mysql或url属性中并不一定安全。

正如其名称所示,
strip\u标记应删除所有HTML标记。我们能证明它的唯一方法是分析源代码。下一个分析应用于
strip_标记(“…”)
调用,没有白名单标记的第二个参数

首先,关于HTML标记的一些理论:标记以


我们只需要小心,不能插入任何标记。也就是说,
。尽管结果不是有效的HTML,
&
仍然需要转义,尤其是可以使用的
&

没有白名单参数的
strip_标签
说明如下:

确保返回的字符串中不存在HTML标记


我无法预测未来的漏洞利用,特别是因为我没有查看PHP源代码。但是,过去也有漏洞利用,因为浏览器接受看似无效的标记(如
)。因此将来可能有人能够利用奇怪的浏览器行为

除此之外,将输出作为完整的HTML块直接发送到浏览器绝不是不安全的:

echo '<div>'.strip_tags($foo).'</div>'
echo'。去除标签($foo)。'
但是,这并不安全:

echo '<input value="'.strip_tags($foo).'" />';
echo';
因为可以通过
轻松结束报价并插入脚本处理程序

我认为总是转换杂散的
要安全得多,根据,这个字符串将“完全”转义,但是
结果是另一个恶意的

<<a>script>alert('ciao');<</a>/script>
alert('ciao');
在字符串中,“真实”标记是
,因为
不是单独的标记


我希望我错了,或者这只是因为旧版本的PHP,但最好检查一下您的环境。

好吧,没有给出任何参数,它会去掉所有标记,所以我看不出有什么漏洞。最糟糕的情况是有人给您提供无效的标记(没有结束标记),但这种最坏的情况只会意味着
strip_tags
会剥离更多的文本。@Gordon谢谢,但我的意思是只剥离一整块HTML数据,所以没有插入文件名等(如果我理解正确,这就是论坛条目讨论的内容)。就我所知,该线程并没有证明strip_tags()中存在漏洞,但继续推荐htmlspecialchars()-这也是我通常做的,但我想知道这是否真的有必要,这一点更为不屑一顾。这可能不言而喻,但需要为新手重复:如果striptags是安全的,取决于上下文。如果输出以属性结束,则否。只有当剥离的内容进入页面正文时,才可以。(这确实足够了。)@Pekka更新了实现
strip_tags()
:那么…tldr;-是的,
strip_tags()
是安全的?@rinogo是的,
strip_tags
在只使用一个参数调用时是安全的。
var_dump(strip_tags(“alert('ciao');”);
“alert('ciao');“
在PHP 7.1.2中。在遇到
之前,它似乎会删除
之后的所有内容。噢,这太糟糕了。不过,似乎通过了这里的所有测试:
<<a>script>alert('ciao');<</a>/script>