我是每个人,
我有一个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
非常感谢
答案 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提供的转义方法:
您还可以参考文档Zend Escaper Theory of Operation了解每种方法的用法。
请使用ZF2查看有关Web应用程序安全性的article,尤其是此部分:Blunting XSS attacks with output escaping