什么时候在CakePHP中进行消毒

时间:2010-01-30 13:59:28

标签: cakephp sanitization

我从食谱中读到(第4.2节)

  

如果使用CakePHP的ORM方法(例如find()和save())和正确的数组表示法(即数组('field'=> $ value))而不是原始SQL,CakePHP已经保护您免受SQL注入。对于XSS的清理,通常最好将原始HTML保存在数据库中而不进行修改,并在输出/显示时进行清理。

所以我们确定我们不需要针对SQL手动清理用户数据,只要我们限制使用find()和save()等方法吗?特别是,如果我直接从$ _POST获取数据而不是从$ this->数据获取数据,这是真的吗?换句话说,假设我使用$ this->数据进行find()查询。然后CakePHP在编写数组$ this->数据时或在为find()编写查询时对SQL进行清理?

我的第二个问题是清理要显示的数据。是Sanitize :: html幂等吗?那么,我可以在我的beforeSave()方法中使用它,还是会在第二次保存时中断,因为它再次应用并提供新的结果?

3 个答案:

答案 0 :(得分:6)

关于这个问题:

  

CakePHP在编写数组$ this->数据时或在为find()编写查询时对SQL进行清理?

Cakephp没有清理控制器中的$ this->数据,如果你检查蛋糕代码,在Dispatcher :: parseParams()http://api13.cakephp.org/view_source/dispatcher/#line-244中你会看到当$ _POST被复制到控制器数据时的值没有消毒。

但是,建议不要使用$ _POST,因为在使用表单助手时,您将失去所有蛋糕的魔力

答案 1 :(得分:0)

哇 - 如果您计划在任何页面上发布数据,如果您直接从$ _POST而非获取数据,则应该绝对清理数据。我记得大约2年前的一个大恐慌,因为据透露,由于用于登录的选择查询的布局,简单的SQL注入将允许蛋糕1.1站点被利用。

然而,许多用户故意将旧规则用于将在SQL中使用的输入字段:

“为了防止SQL注入,用户输入不能直接嵌入到SQL语句中。而是必须转义用户输入......”

所以,是的,这是一个单独的问题,但同样的想法 - 虽然CakePHP是老板,并为我们做了很多,我们永远不应该相信它的安全盲目。自己擦洗数据的性能影响几乎为零。所以就这么做吧。

答案 2 :(得分:0)

不,它不会影响你。您可以在before_save()中使用它。如果您使用任何自定义查询功能,即可以使用自己的查询的功能

,则需要进行清洁