【问题标题】:How to prevent SQL Injection attack in applications programmed in Zend Framework?如何防止在 Zend Framework 中编写的应用程序中的 SQL 注入攻击?
【发布时间】:2010-03-03 09:55:25
【问题描述】:

我对采埃孚安全没有任何概念。对数据库进行操作时是否必须使用过滤器?也许绑定就足够了?这个怎么样:

$users->update($data, 'id=1');

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

您能否提供一些关于 ZF 安全性的好文章的链接(主要是关于 SQL 注入和 XSS)?

【问题讨论】:

    标签: php sql zend-framework sql-injection


    【解决方案1】:

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


    关于您的代码 sn-p,请查看 Zend_Db in the Reference Guide 上的章节:

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

    这并不意味着您不必担心安全问题。比如上面的Update method

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

    注意由于您显然使用的是Zend_Db_Table,因此第三个参数是第二个参数。在内部,表实例会将调用委托给 db 适配器,第一个参数是表实例的表名。


    关于Zend_View和XSS攻击向量:

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

    再次大部分并不代表全部。 Zend_View 确实提供了 Zend_View::escape() 来帮助您清理输出,但这没什么特别的。

    【讨论】:

      【解决方案2】:

      同样的概念适用于 Zend 框架和所有其他网络应用程序/库/任何操纵用户数据的东西:

      始终验证用户输入。不信任 一个。

      如果您期待一个字符串,请确保您收到一个字符串。这可以使用框架库(例如,在这种情况下您使用 Zend 框架)或通过手动实现验证函数来执行。

      验证必须始终在服务器端执行。客户端验证也应该存在,以提供更好的用户体验。

      如果是 Zend,请参考手册中的Validation page

      【讨论】:

        【解决方案3】:

        绑定应该防止 SQL 注入,但它不能防止 XSS。您应该始终根据需要过滤数据,并且在视图中回显输出时,您应该避开任何可能有危险的内容。

        echo $this->escape($this->foo);
        

        【讨论】:

        • 我们可以在保存数据之前在模型中使用它吗?
        【解决方案4】:

        我会建议使用 Zend 过滤器,无论您需要什么特定的东西。您可以在应用程序中的任何位置使用它。

        请求参数

        $alpha = new Zend_Filter_Alpha();
        $name = $alpha -> filter($this -> _request -> getParam('name')); //while processing url parameters
        

        数据库

        $int = new Zend_Filter_Int();
        $select -> where("id = ?", $int -> filter($id)); //during db processing also
        

        也在表单元素中。我会跳过这个,因为可以找到很多这样的例子。

        【讨论】:

        • zend框架中是否有特定的功能可以防止所有的sql注入和xss?
        猜你喜欢
        • 2012-03-19
        • 2014-12-08
        • 2011-01-19
        • 1970-01-01
        • 2013-05-08
        • 2019-01-09
        • 2023-03-14
        • 1970-01-01
        • 2015-01-15
        相关资源
        最近更新 更多