gpt4 book ai didi

mongodb - 防止 Lithium/mongoDB 中的表单操作

转载 作者:可可西里 更新时间:2023-11-01 10:01:20 25 4
gpt4 key购买 nike

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

例如我们有一个像这样的简单形式:

<?=$this->form->create();?>
<?=$this->form->field('name',array('label' => 'Topic title'));?>
<?=$this->form->field('text',array('label' => 'Content'));?>
<?=$this->form->submit('create');?>

这将更简单地保存:

if($this->request->is('post')) {
$board_post = BoardPosts::create($this->request->data);
$board_post->save();
}

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

最佳答案

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

$whitelist = array(
'title',
'text'
);
$post = BoardPosts::create();
$post->save($this->request->data, compact('whitelist'));

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

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

关于mongodb - 防止 Lithium/mongoDB 中的表单操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12881719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com