首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止Lithium/mongoDB中的表单操作

防止Lithium/mongoDB中的表单操作
EN

Stack Overflow用户
提问于 2012-10-14 19:19:06
回答 1查看 319关注 0票数 2

我正在用Lithium和mongoDB写我的第一个社区页面。我真的很喜欢mongo的无模式方式,但有一个问题使它无法在没有模式的情况下工作:

例如,我们有这样一个简单的表单:

代码语言:javascript
复制
<?=$this->form->create();?>
<?=$this->form->field('name',array('label' => 'Topic title'));?>
<?=$this->form->field('text',array('label' => 'Content'));?>
<?=$this->form->submit('create');?>

这将是更简单的节省,通过这个:

代码语言:javascript
复制
if($this->request->is('post')) {
    $board_post = BoardPosts::create($this->request->data);
    $board_post->save();
}

现在,每个人都可以使用Firebug、开发工具等通过DOM操作来添加一些表单输入。当然,它可能是数据库中的一些无意义的字段,但也可能有人添加了一个真正使用的字段。防止这种情况的唯一方法是在模型中创建一个模式。但对我来说,这使得无模式数据库的整个概念变得毫无用处,不是吗?当某些字段不能出现时,如何为不同的情况/操作创建模式?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-14 22:02:56

Model::save()方法在其选项中接受'whitelist'参数。请参阅http://li3.me/docs/lithium/data/Model::save()

代码语言:javascript
复制
$whitelist = array(
    'title',
    'text'
);
$post = BoardPosts::create();
$post->save($this->request->data, compact('whitelist')); 

您还可以在您的模型中定义protected $_schema并设置protected $_meta = array('locked' => true);,这将自动将白名单设置为您的模式中定义的字段。但是,最好在您的控制器中定义白名单,以避免您所描述的攻击。

这个问题被称为mass-assignment vulnerability,如果开发人员不小心,它会存在于许多框架中。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12881719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档