我不是百分百确定这是否是一个大问题我似乎现在认为它是正确的但我认为我可能在Chrome中的Inspect Element查看器中发现了一个问题或者其他漏洞。
我正在使用(我现在已经更改了我的设置)隐藏ID以设置多个默认值,一个是用户级别,另一个是默认情况下使用户处于活动状态。
但是当我在inspect元素视图中查看这些ID然后更改了值时,提交表单会将NEW值提交给服务器而不是我给它的值。
例如:
我的代码中有类似的内容,
<input type="hidden" name="data[user][level][id]" value="1" id="MyID">
然后我在Inspect视图中将其更改为,
<input type="hidden" name="data[user][level][id]" value="2" id="MyID">
然后我提交了表单并且对提交的新值感到惊讶,我总是在隐藏ID不可更改的情况下进行操作,浏览器应该只提交其中的默认值。
我现在已将此更改为让数据库默认为基本用户,然后我可以更改用户设置。但在某些情况下,这可能不是一种选择,因此我希望得到一个答案或一些关于如何使其更安全的反馈。
我只是有点慢,是否有更好的方法(不同的方法)将“隐藏的”数据从表单传递到服务器?
我正在考虑使用JQuery在用户选择/提交表单后向表单添加所需的隐藏字段,但我不确定这是100%安全还是即使它是个好主意。
非常欢迎任何想法/反馈......
非常感谢,
格伦。
答案 0 :(得分:0)
我有同样的问题将数据库数据传递到模态,我知道的解决方案是使用jquery ajax从数据库获取请求文件的信息,将它们添加到变量中并比较变量
$.ajax({
url: "test.html",
context: document.body
}).done(function() {
$(this).addClass("done");
});
我使用此代码示例来执行此操作。 当然,根据您的脚本进行一些修改
答案 1 :(得分: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('/'));
}
现在我将添加调用我添加到此的Auth注销以获得额外的安全性,因为用户可能已经登录系统,而不是他们正在尝试做他们不应该做的事情。 / p>
希望能帮助他人!
但这只是CakePHP使用时的修复方法。我会认为其他框架会有他们的选择,但如果你只使用基本的HTML?或者像Drupal这样的CMS可能会有内置的安全性。
非常感谢
格伦。
答案 2 :(得分:0)
我发现这个问题的唯一安全和最佳解决方案是在服务器端检查随表单发送的user_id是否与登录的user_id相同。
尽管使用jquery是个好主意,但是,因为使用数据,我的情况不起作用:$(this).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());
希望这有帮助;)