Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 避免CakePHP$this的方法->;数据安全漏洞?_Database_Security_Model_Cakephp 1.3 - Fatal编程技术网

Database 避免CakePHP$this的方法->;数据安全漏洞?

Database 避免CakePHP$this的方法->;数据安全漏洞?,database,security,model,cakephp-1.3,Database,Security,Model,Cakephp 1.3,我刚刚意识到,在做基本的CakePHP工作时,有一个非常糟糕的安全问题,很多人不一定注意到。我将使用这个基本函数,我认为很多用户在使用CakePHP驱动的应用程序时都会用到这个函数 function edit() { if(!empty($this->data)) { if($this->User->save($this->data)) { } } } 让我们假设用户有使用此操作的权限。此操作可以编辑用户信息,这些信息可能有城市、号码和当然还有用

我刚刚意识到,在做基本的CakePHP工作时,有一个非常糟糕的安全问题,很多人不一定注意到。我将使用这个基本函数,我认为很多用户在使用CakePHP驱动的应用程序时都会用到这个函数

function edit() {
  if(!empty($this->data)) {
    if($this->User->save($this->data)) {
    }
  }
}
让我们假设用户有使用此操作的权限。此操作可以编辑用户信息,这些信息可能有城市、号码和当然还有用户名。假设我们想要一个表单,它只允许我们编辑城市和号码,而不允许编辑用户名。那么,如果有人只是用firebug将用户名字段插入到表单中呢?然后提交表格。现在,编辑只需获取所有帖子信息,包括用户名字段及其值,然后立即编辑它们。因此,在这种情况下,即使没有字段,也可以更改用户名

如果有人使用saveAll(),这可以更进一步,它允许您一次验证和保存多个模型。如果您可以从表单字段猜测要使用的模型,那么您也可以很容易地转到其他模型和表并修改这些信息

既然你理解了我的担忧,我的问题是什么是避免这种情况的最好或至少接近最好的方法

我知道我可以从$this->data中获取我想要的数据到其他变量,然后将其传递到save或saveAll,但是因为有许多表单和ajax请求,这将是相当多的工作。但这是唯一的出路还是有更好的办法


我应该做什么,或者有什么行为可以阻止这一切?就像检查某个控制器中的某些操作可以从post中获得哪些变量一样?

经过几天的研究,我发现这并不是真正的“安全漏洞”,而是初学者的错误

有两种方法可以避免这种类型的表单篡改:Security component(),它通过为表单字段创建一次性哈希来自动获得CSRF和表单篡改保护

另一种方法是为save()函数提供第三个参数。保存实际上得到3个参数:数据、验证、字段列表。fieldlist参数的作用类似于允许保存的字段白名单

我第一次向cakephp报告这个问题是一个bug,但当时不是,但这个euromark的家伙回答我说,他很好地记录了实际问题以及如何进行安全保存,我真的认为这本书读得很好。因此,如果您有相同的问题,请参阅本页: