Ing*_*gro 1 javascript security requirejs backbone.js
我实际上正在为我的公司开发一个单页应用程序,它涉及不同用户角色的不同视图,以防止没有足够权限的人访问他们不应该看到的数据,或者执行他们无权执行的功能.
我在后端使用PHP和REST API,所以我觉得我在那里相当安全,但我对客户端安全性一无所知.
我正在考虑在我的main.js中以这种方式存储具有当前用户角色的App变量:
require(['jquery',
'underscore',
'backbone',
'marionette',
'app',
'routers/adminRouter',
'routers/userRouter',
], function($, _, Backbone, Marionette, App, AdminRouter, UserRouter){
App.vent.on("routing:started", function(){
Backbone.history.start();
});
App.addInitializer(function(){
if(userRole==="admin"){
App.Router = new AdminRouter;
} else {
App.Router = new UserRouter;
}
App.vent.trigger("routing:started");
});
App.addRegions({
content: "#main",
page: "#page",
dialogs: "#dialogs"
});
App.start();
App.vars = {};
App.vars.userRole = userRole;
Run Code Online (Sandbox Code Playgroud)
App.js只是:
define([
'underscore',
'backbone',
'marionette'
], function(_, Backbone){
var App = new Backbone.Marionette.Application();
return App;
});
Run Code Online (Sandbox Code Playgroud)
变量userRole只是一个全局变量,我在index.php页面上从我的服务器引导.这安全多少钱?有一种方法可以改变userRole页面加载的价值吗?或者App.vars.userRole在应用程序运行时进行更改?我无法App从控制台访问变量,但正如我所说,我对客户端编程非常新,我必须知道我是否可以依赖该变量的值.处理这种情况的最佳方法是什么?先感谢您.
@devundef说的是真的.有了安全性,您的所有授权都必须在服务器端进行.一旦代码在客户端和野外加载,没有什么能阻止它们通过并以你不喜欢的方式改变它.在某些情况下,它可能需要付出更多的努力(例如,如果你缩小它的内容就很难阅读),但它绝对可行,所以不应该依赖这样的东西.
只要您正在检查服务器端,如果坏客户端执行此操作就无所谓了.例如,您可以将userRole作为便利变量来指示客户端应用程序的行为方式.他们可能会恶意更改userRole,给自己一个虚假的管理员状态,这使他们可以访问管理视图,但是当他们想要做任何其他事情时他们的播放时间结束(例如从服务器获取数据等)这通常是什么它归结为.基本上,您希望保护需要特定授权的操作(GET,POST,PUT,DELETE),例如管理员状态.服务器上的任何敏感路由都必须在完成请求之前进行一些此类检查.
同样,当客户端发送userRole = admin时,您无法信任.您所做的是首先需要验证他们是他们声称的用户,然后再授权该用户是否具有适当的权限(如管理员状态).每一次.
我使用加密的cookie会话.在用户进行身份验证后,他们会获得无法篡改的cookie.因此,每次他们提出请求时,我都会使用该Cookie说"好的,这确实是用户X".一旦我有了这个,我会进行数据库查询,说"好吧,他是一名管理员".如果检查出来,我可以完成请求.如果没有,我给他们一个粗鲁的错误.
如果没有某些特权的人可能无法访问某些MODELS,VIEWS和COLLECTIONS,我不确定最好的方法是什么.通常我唯一关心的是数据库中的原始数据.但是,我实际上可能会编译几个不同的客户端应用程序(例如,一个用于普通用户,一个仅用于管理员),并根据他们达到索引时的状态提供适当的应用程序.好吧,说实话,我甚至不会让初始请求达到相同的网址.但程序仍然是相同的.1)认证和2)授权.
| 归档时间: |
|
| 查看次数: |
1161 次 |
| 最近记录: |