代码之家  ›  专栏  ›  技术社区  ›  JGuymer

淘汰JS安全建议/开发工具

  •  0
  • JGuymer  · 技术社区  · 6 年前

    我有一个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)
    

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

    我的问题是,你如何防止这样的事情发生?我正在运行检查,以查看此人正在编辑的对象是否允许编辑,但理论上,我必须检查返回到服务器的每个属性,以查看其是否可以编辑。我的一些模型非常复杂,包含大量数据。

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

    谢谢

    詹姆斯

    1 回复  |  直到 6 年前
        1
  •  1
  •   lorefnon    6 年前

    这个问题实际上与Knockoutjs无关。

    你不能信任客户。时期

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

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