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