发新话题
打印

新版CakePHP1.2修复了save的id注入问题

新版CakePHP1.2修复了save的id注入问题

作者:老王

官方网站看到,CakePHP1.2已经释出新版(1.2.0.5847 pre-beta)了,正如预期,这次不再是Alpha,而是Pre-Beta了,详细请看Changelog

从Changelog里可以看到以前Model在save的时候存在注入的危险已经被修复了
(Fixes #3187 and #3230, Model -> save issue with fieldList and id)

如果你不知道这个安全漏洞的来由,可以参考此连接:http://nio.infor96.com/archives/754

我对比了一下新版(1.2.0.5847 pre-beta)和旧版(1.2.0.5427alpha)的差异,发现修改主要是
加了一个名为whitelist(Whitelist of fields allowed to be saved)的属性,并在调用set方法的时候做了一些判断。

复制内容到剪贴板
代码:
<?php
class Foobar extends AppModel {
    var $name = 'Foobar';

    // 注意别把id字段放这里就万事大吉了。
    var $whitelist = array('title', 'content', 'other field ...');

    // ...
}
?>


这样设置后,在insert操作的时候,就可以屏蔽id可能的注入问题,如果你要执行的是upate操作,可以通过$this->model->id = 123的方式显式指定id,而不要像脚手架生成的代码那样通过表单字段的方式去传递,因为在whitelist里没有id,^_^。

题外话:

比较赶兴趣的CakePHP1.2的新功能是Unicode和REST的支持。

相关文档http://tempdocs.cakephp.org/
相关特色:http://bakery.cakephp.org/articles/view/new-cakephp-releases

TOP

复制内容到剪贴板
代码:
// index
$this->paginate();

// view
$this->model->id = 123;
$this->model->read();

// add
$this->model->create($this->data);
$this->model->save();

// edit
$this->model->id = 123;
$this->model->set($this->data);
$this->model->save();

// delete
$this->model->id = 123;
$this->model->del();

TOP

TOP

TOP

whitelist好麻烦
专注于DEDE采集和数据深度挖掘

TOP

发新话题