我有一个MVC / SPA应用程序,它有许多敲除函数,这些函数都有分配给它们的变量,因此可以从其他函数中调用它们。因此,当某人更新某个内容时,它会调用页面上的其他内容(如果在那里)并调用服务器。
数据库中的所有主键都是整数。
数据和模型来自Model,该模型被转换为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)并对调用服务器的浏览器进行了更改,该服务器将我编辑的主键发送到服务器。
我的问题是你怎么防止这样的事情发生?我正在运行检查,以查看正在编辑的对象是否允许进行编辑,但理论上,我必须检查返回到服务器的每个属性,看看它们是否可以编辑。我的一些模型相当复杂,有大量的数据。
如有任何意见或评论,将不胜感激。
谢谢
詹姆斯
发布于 2018-04-08 13:57:16
这个问题与Knockoutjs毫无关系。
你不能相信客户。句号。
您从客户端收到的任何请求都必须经过授权,而不管您在客户端有什么样的封装。因为即使您可以防止通过devtools访问这些变量,人们也可以很容易地直接访问您的api并发送他们想要的任何请求。
因此,是的,您必须检查进入服务器的每个属性(如果您具有属性级粒度授权)。如果您还没有建立基于角色的分层授权库,那么您可能需要考虑在后端集成一个基于角色的分层授权库。
https://stackoverflow.com/questions/49718497
复制相似问题