Knockout JS 安全建议/开发工具
Knockout JS Security Advice / Dev Tools
我有一个 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 并发送他们想要的任何请求。
所以是的,您必须检查每个 属性 进入服务器(如果您有 属性 级别的精细授权)。如果您还没有到位,您可能需要考虑投入时间在后端集成基于角色的分层授权库。
我有一个 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 并发送他们想要的任何请求。
所以是的,您必须检查每个 属性 进入服务器(如果您有 属性 级别的精细授权)。如果您还没有到位,您可能需要考虑投入时间在后端集成基于角色的分层授权库。