Knockout JS 安全建议/开发工具

Knockout JS Security Advice / Dev Tools

我有一个 MVC / SPA 应用程序,其中包含许多剔除函数,所有这些函数都分配有变量,因此可以从其他函数调用它们。因此,当有人更新某些内容时,它会调用页面上的其他内容(如果存在)并调用服务器。

数据库中的所有主键都是整数。

数据和模型来自 MVC 页面模型,它被转换为 JSON 并使用 fromJSON 实用程序进行映射。

var myFunction1ViewModel;
var myFunction2ViewModel;

var Function1ViewModel = function () {
    var self = this;
    self.data= ko.mapping.fromJSON($("#serverData1").val());
    self.doSomething = function(){
       //call server;

       if(typeof myFunction2ViewModel != 'undefined'){
         myFunction2ViewModel.doSomethingElse();
       }
    }
};

var Function2ViewModel = function () {
    var self = this;
    self.data= ko.mapping.fromJSON($("#serverData2").val());
    self.doSomethingElse = function(){
        //call server;
    }
};

function initFunction1() {

    myFunction1ViewModel= new Function1ViewModel();
    ko.cleanNode($('.panel-content')[0]);
    ko.applyBindings(myFunction1ViewModel, $('.panel-content')[0]);


}

function initFunction2() {

    myFunction2ViewModel= new Function2ViewModel();
    ko.cleanNode($('.panel-content2')[0]);
    ko.applyBindings(myFunction2ViewModel, $('.panel-content2')[0]);

}


$(document).ready(function(){
    initFunction1();
    initFunction2(); 
})

我在 devtools 中玩游戏时输入了

myFunction2ViewModel.data.PrimaryKeyId(99999999999)

并在调用服务器的浏览器中进行更改,将我编辑的主键发送到服务器。

我的问题是你如何防止类似的事情发生?我正在 运行 检查是否允许编辑该人正在编辑的对象,但理论上我将不得不检查每个 属性 返回服务器以查看他们是否可以编辑它.我的一些模型非常复杂并且有很多数据。

如有任何想法或意见,我们将不胜感激。

谢谢

詹姆斯

这个问题真的和Knockoutjs没有关系。

你不能相信客户。时期。

无论您在客户端进行何种封装,您从客户端收到的任何请求都必须经过授权。因为即使您可以阻止通过 devtools 访问这些变量,人们也可以轻松地直接访问您的 api 并发送他们想要的任何请求。

所以是的,您必须检查每个 属性 进入服务器(如果您有 属性 级别的精细授权)。如果您还没有到位,您可能需要考虑投入时间在后端集成基于角色的分层授权库。