在为XSS进行转义后转义一些HTML标记

时间:2011-06-01 00:07:41

标签: php security zend-framework xss

我将html存储在数据库中,我需要将其输出到页面。

  • 如果我没有逃避()它,那么我得到了我想要的粗体格式,但我冒着从未转义的html源获取XSS的风险。
  • 如果我转义()它,则会显示原始html代码<b>bold text</b>,而不是粗体文字

除了一些标签,我怎么能逃脱一切?我正在考虑应用escape(),然后搜索<b></b>并取消它们。那会有用吗?您看到的任何安全问题?我也不确定如何搜索<b></b>标签。那个正则表达式可能还是什么?

P.S。 escape()我的意思是Zend中的一个函数。我相信它相当于htmlspecialchars()

7 个答案:

答案 0 :(得分:1)

如果数据库中的HTML标记来自您不信任的用户,您应该授予他们访问markdown或类似“安全”编辑环境的权限,这样他们就可以准备他们想要的标记而不允许注入HTML。

尝试执行选择性过滤经常是错误的,并且攻击者会错误地注入恶意代码。所以不要让他们写原始HTML。

答案 1 :(得分:1)

htmlspecialchars_decode()htmlspecialchars()相反。有可能无法解决它,但没有限制标签的参数。

如果html由用户撰写,则不明白:)

答案 2 :(得分:1)

Unescaping是要走的路。如果只有白名单要从html转义中转换回几个标记,那么您将不会遇到XSS漏洞利用。

变通方法标记没有提供任何优势,因为许多失败的BBcode解析器证明了这一点。

(而不是来回转换,因此使用HTMLPurifier可能是明智的。)

答案 3 :(得分:1)

您可以使用HTMLPurifier库来处理转义等所需的一切。这是一个很好的视频,解释了如何将其安装到zend框架

http://www.zendcasts.com/htmlpurifier-integration/2011/05/

答案 4 :(得分:1)

在第二个参数中尝试使用strip_tags是$ allowable_tags

答案 5 :(得分:1)

使用 Zend_Filter_StripTags 类作为构造函数的参数使用带有以下键的数组:

  1. 'allowTags'=&gt;允许的标签
  2. 'allowAttribs'=&gt;允许的属性
  3. 这第二部分允许你修剪所有不需要的属性,比如'onClick'等,它们可能与<script>代码一样危险,但你可以为'<img>留下'src'或为{<a>留下'href' {1}}

答案 6 :(得分:0)

创建自己的视图助手,或者也可以在控制器中使用setEscape()参见http://framework.zend.com/manual/en/zend.view.scripts.html#zend.view.scripts.escaping