我从食谱中读到(第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()方法中使用它,还是会在第二次保存时中断,因为它再次应用并提供新的结果?
答案 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()
中使用它。如果您使用任何自定义查询功能,即可以使用自己的查询的功能