如何在Zend Framework中编写的应用程序中防止SQL注入攻击?

Kam*_*zek 4 php sql zend-framework sql-injection

我对ZF安全没有任何概念.在数据库上操作时是否必须使用Filter?也许绑定就足够了?这个怎么样:

$users->update($data, 'id=1');
Run Code Online (Sandbox Code Playgroud)

应该以某种方式过滤$ data数组吗?随意写下你对这个问题的了解.

你能给一些关于ZF安全性的文章链接(主要是关于SQL注入和XSS)吗?

Gor*_*don 5

简短回答
虽然ZF采取并提供了一些措施来保护您的应用程序,但您仍应采用与Zend Framework相同的预防措施.


关于您的代码段,请参阅参考指南中有关Zend_Db的章节:

默认情况下,使用参数插入数据数组中的值.这可以降低某些类型的安全问题的风险.您不需要对数据数组中的值应用转义或引用.

这并不意味着您不必担心安全问题.例如,对于上面的Update方法

第三个参数是一个包含SQL表达式的字符串,该表达式用作要更改的行的条件.此参数中的值和标识符不会被引用或转义.您有责任确保将任何动态内容安全地插入到此字符串中.有关帮助您执行此操作的方法,请参阅引用值和标识符.

注意,因为你Zend_Db_Table明显使用,第三个参数是第二个参数.在内部,表实例将委托对db适配器的调用,第一个param是表实例的tablename.


关于Zend_View和XSS攻击向量:

Zend_View带有一组初始的辅助类,其中大部分与表单元素生成有关,并自动执行适当的输出转义.

同样,大多数并不意味着所有.Zend_View确实提供了Zend_View :: escape()来帮助你清理输出,但这没什么特别的.