过滤,存储到数据库并输出textarea的文本? Zend Framework 2.3.5

时间:2015-03-08 18:43:43

标签: php mysql security zend-framework2

我是每个人,

我有一个textarea。我需要将其文本存储到数据库Mysql中并输出它,但输出必须是安全的并保留断行。

在存储之前我使用InputFilter验证:

       $inputFilter = new InputFilter();
       $inputFilter->add(array(
             'name'     => 'Description',
             'required' => true,
             'filters'  => array(
                 array('name' => 'StripTags'),
                 array('name' => 'StringTrim'),
             ),
             'validators' => array(
                 array(
                     'name'    => 'StringLength',
                     'options' => array(
                         'encoding' => 'UTF-8',
                         'min'      => 1,
                         'max'      => 30000,
                     ),
                 ),
             ),

         ));

在存储文本输出之后,我使用:

echo nl2br(strip_tags($Description));

strip_tags用于防止XSS攻击,nl2br用于保护断行。 那么,它安全吗?我试图保存

"hi, how are yoy? <a href="www.hackered.com"> hackered </a>"

进入数据库的文本是:

"hi, how are yoy? hackered"

我尝试将第一个短语直接存储到db中,输出如上所示。这似乎很安全。

这种方法安全吗?有一些方法安全吗? 我有这个疑问,因为在Zend Filter参考中它说:

  

警告

     

Zend \ Filter \ StripTags可能不安全

     

警告Zend \ Filter \ StripTags只能用于剥离所有内容   可用的标签。

     

使用Zend \ Filter \ StripTags通过剥离一些来保证您的网站安全   不需要的标签会导致不安全和危险的代码。

     

Zend \ Filter \ StripTags不得用于防止XSS攻击。这个   filter不能替代使用Tidy或HtmlPurifier。

     

http://framework.zend.com/manual/current/en/modules/zend.filter.set.html#striptags

非常感谢

1 个答案:

答案 0 :(得分:2)

当你说:

时,我认为你是对的
  

有一些方法安全吗?我有这个疑问,因为在Zend Filter参考中它说:

     

Zend \ Filter \ StripTags不得用于防止XSS攻击

确保Zend\InputFilter是帮助您提高应用程序安全性的重要组件之一。 但是,它被认为是用于防止和阻止XSS攻击的错误策略

  

Zend \ InputFilter:此组件负责扫描输入以转义或删除非法字符串(HTML元素或文件系统路径),以及转换它以满足格式要求(剥离空格和换行符或改变字符串案例。)

Zend Framework提供的专用于钝化XSS攻击的组件是Zend\Escaper。它提供了五种方法来转义输出,具体取决于输出在渲染页面中的显示位置。存在用于在HTML页面内容,HTML元素属性,脚本元素,样式元素和URI中转义/编码内容的方法。

  

Zend \ Escaper:此组件通过引入基于同行评审规则的上下文转义,提供了一种转义输出并防御XSS及相关漏洞的方法。

这些是Zend \ Escaper提供的转义方法:

  • escapeHtml :转义HTML Body上下文的字符串。
  • escapeHtmlAttr :转义HTML属性上下文的字符串。
  • escapeJs :转义Javascript上下文的字符串。
  • escapeCss :转义CSS上下文的字符串。
  • escapeUrl :转义URI或参数上下文的字符串。

您还可以参考文档Zend Escaper Theory of Operation了解每种方法的用法。

请使用ZF2查看有关Web应用程序安全性的article,尤其是此部分:Blunting XSS attacks with output escaping