我将html存储在数据库中,我需要将其输出到页面。
<b>bold text</b>
,而不是粗体文字。 除了一些标签,我怎么能逃脱一切?我正在考虑应用escape(),然后搜索<b>
和</b>
并取消它们。那会有用吗?您看到的任何安全问题?我也不确定如何搜索<b></b>
标签。那个正则表达式可能还是什么?
P.S。 escape()我的意思是Zend中的一个函数。我相信它相当于htmlspecialchars()
。
答案 0 :(得分:1)
如果数据库中的HTML标记来自您不信任的用户,您应该授予他们访问markdown或类似“安全”编辑环境的权限,这样他们就可以准备他们想要的标记而不允许注入HTML。
尝试执行选择性过滤经常是错误的,并且攻击者会错误地注入恶意代码。所以不要让他们写原始HTML。
答案 1 :(得分:1)
htmlspecialchars_decode()
与htmlspecialchars()
相反。有可能无法解决它,但没有限制标签的参数。
如果html
由用户撰写,则不明白:)
答案 2 :(得分:1)
Unescaping是要走的路。如果只有白名单要从html转义中转换回几个标记,那么您将不会遇到XSS漏洞利用。
变通方法标记没有提供任何优势,因为许多失败的BBcode解析器证明了这一点。
(而不是来回转换,因此使用HTMLPurifier可能是明智的。)
答案 3 :(得分:1)
您可以使用HTMLPurifier库来处理转义等所需的一切。这是一个很好的视频,解释了如何将其安装到zend框架
答案 4 :(得分:1)
在第二个参数中尝试使用strip_tags是$ allowable_tags
答案 5 :(得分:1)
使用 Zend_Filter_StripTags 类作为构造函数的参数使用带有以下键的数组:
这第二部分允许你修剪所有不需要的属性,比如'onClick'等,它们可能与<script>
代码一样危险,但你可以为'<img>
留下'src'或为{<a>
留下'href' {1}}
答案 6 :(得分:0)
创建自己的视图助手,或者也可以在控制器中使用setEscape()参见http://framework.zend.com/manual/en/zend.view.scripts.html#zend.view.scripts.escaping