我有一个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并发送所需的任何请求。

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

关于javascript - knockout JS安全建议/开发工具,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49718497/

10-09 08:54