1

我不是 100% 确定这是否是一个大问题,我似乎认为它现在是,但我想我可能发现了一个问题,或者在 Chrome 中的 Inspect Element 查看器中发现了一个漏洞。

我正在使用(我现在更改了我的设置)隐藏 ID 来设置一些默认值,一个是用户级别,另一个是默认情况下使用户处于活动状态。

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

例如:

我的代码中有以下内容,

    <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% 安全,或者即使它是一个好主意。

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

非常感谢,

格伦。

4

3 回答 3

0

我在将数据库数据传递到模式时遇到了同样的问题,我知道的解决方案是使用 jquery ajax 从请求文件的数据库中获取信息,将它们添加到变量中并比较变量

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

我使用这个代码示例来做到这一点。当然,根据您的脚本需要进行一些修改

于 2013-09-12T20:21:39.207 回答
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 logout 我添加到此以增加安全性,因为用户可能已经登录了系统,而不是他们试图做他们不应该做的事情。

希望能帮助别人!

但这只是在使用 CakePHP 时的修复。我会认为其他框架会有他们的选择,但如果你只使用基本的 HTML?或者像 Drupal 这样的 CMS 可能还有内置的安全性。

非常感谢

格伦。

于 2013-09-25T13:45:16.517 回答
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());

希望这有帮助;)

于 2017-02-06T12:42:15.080 回答