2013-07-20 74 views
1

我不是100%肯定,如果这是大问题了我认为它是正确的,但现在我想我可能会发现一个问题,或者在其他内孔检查Chrome中的元素查看器。谷歌浏览器检查元素发出带有隐藏标识的

我用(我现在已经改变了我的设置)隐藏标识的设置了一些默认的,一个是用户层面,另一个是让用户主动默认。

但是,当我在检查元素视图中查看这些ID并更改值时,提交表单会将NEW值提交给服务器,而不是我给出的值。

例如:

我有这样的事情我的代码中使用以下,

<input type="hidden" name="data[user][level][id]" value="1" id="MyID"> 

我再检查视图中改变了它,

<input type="hidden" name="data[user][level][id]" value="2" id="MyID"> 

然后我提交表单而感到惊讶的是,新的值被提交,我总是inpresion下隐藏的ID的地方不能改变,浏览器应该只提交中保存的默认值。

我现在已经改变了这又让数据库默认为基本用户,然后我可以改变用户设定有我想。但在某些情况下,这可能不是一种选择,所以我希望得到一个关于如何使这更安全的答案或一些反馈。

我只是有点慢,是否有更好的方法(不同的方法)将'隐藏'的数据从表单传递到服务器?

我正在考虑使用JQuery在用户选择/提交表单时向表单添加所需的隐藏字段,但我不确定这是否100%安全,或者即使它是一个好主意。

任何想法/反馈是非常欢迎.....

非常感谢,

格伦。

回答

0

我发现了一个更好的方式来做到这一点,至少在CakePHP。 CakePHP框架内置了安全调用。这些内置的函数在添加时给你提供了各种各样的东西,但我使用它们的主要原因是为了阻止这种形式的篡改。

我不是100%肯定它是如何做到这一点,但它增加了一个记号,以各种形式,并检查是否提交的形式是正确的?再次不确定令牌如何工作。

但这里是我使用的代码::

public function beforeFilter() { 
    $this->Auth->allow('index', 'SystemAccess'); 
    $this->Security->blackHoleCallback = 'blackhole'; 
} 

public function blackhole($type) { 
    $this->Auth->logout(); 
    $this->Session->setFlash('Sorry a security issue has been detected, please try again or contact us for support.', 'default', array(), 'bad'); 
    $this->redirect($this->Auth->redirect('/')); 
} 

现在,我将添加呼叫的验证登出我加入到这一额外增加安全性,因为用户可能已经登录一个系统上它不是那些试图做他们不应该做的事情的人。

希望能帮助别人!

但这只是CakePHP使用时的一个修复。我会认为其他框架会有他们的选择,但如果您只使用基本的HTML?或者像Drupal这样的内容管理系统,可能会有内置的安全性。

很多谢谢

格伦。

0

我有数据库中的数据传送到一个模式同样的问题,我知道解决的办法是使用jQuery的Ajax获得请求文件,从数据库中的信息,将它们添加到变量和比较变量

$.ajax({ 
    url: "test.html", 
    context: document.body 
}).done(function() { 
    $(this).addClass("done"); 
}); 

我用这个代码示例来做到这一点。 当然有一些修改取决于你的脚本

0

我发现这个问题的唯一安全和最佳解决方案是检查服务器端与表单发送的user_id是否是相同的user_id登录与否。

虽然使用jQuery是好主意,但是,作为使用的数据是没有用我的情况下工作:$(本).serialize(),

但是这里是我在服务器端的代码(注意,我使用Laravel 5.4,但我肯定不会和你的情况没关系)

if ($request->user_id != Auth::user()->id) 
     return json_encode("F**K YOU ! Don't Play Smart -_- !"); 
    else 
     raw_material_category::create($request->all()); 

希望这有助于;)