我有一个带有许多基因敲除函数的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)
并在调用服务器的浏览器中进行了更改,该服务器将我编辑的主键发送到服务器。
我的问题是你如何阻止这样的事情?我正在运行检查以查看是否允许编辑该人正在编辑的对象,但理论上我将不得不检查每个返回服务器的属性以查看它们是否可以编辑。我的一些模型非常复杂,并且有很多数据。
任何想法或意见都将不胜感激。
由于
詹姆斯
答案 0 :(得分:1)
这个问题与Knockoutjs无关。
你无法信任客户。期。
无论您在客户端使用何种封装,您从客户端收到的任何请求都必须通过授权。因为即使您可以阻止通过devtools访问这些变量,人们也可以轻松地直接访问您的api并发送他们想要的任何请求。
所以是的,你必须检查每个进入服务器的属性(如果你有属性级别的粒度授权)。您可能需要考虑投入时间在后端集成基于角色的分层授权库,如果您还没有。