2017-02-14 65 views
3

我担心如果我使用本地存储来存储用户信息,黑客可能会进入开发人员控制台/应用程序/本地存储以更改数据(如公司名称)并启动从我的数据库从其他公司获取数据。这里有一些更详细的信息安全使用本地存储的HTML Angular 2项目

我正在开发一个商业应用程序,在注册后,我会收到诸如公司,电子邮件,名称等基本用户信息。

纽约DATABSE(火力)数据结构的简化版本,看起来像

-company1 
    -filed1 
     -data1 
    -filed2 
     -data1 
-company2 
    -field1 
     data1 

这是我要做的事目前没有本地存储(以及它被提到的问题)

  1. 用户打开该网站登录,该应用转到firebase登录用户并检索用户详细信息以将其存储在变量中
  2. 每次用户想要进行查询时,我都会使用该变量并查找诸如公司名称(在这个例子中)。 然后,我告诉firebase搜索基于该公司名称(company1)的路径。

这一切工作正常。然而,问题在于,启动时没有用户,因此我的所有AuthGuard都会失败,导致用户重新返回到登录页面。 想象一下,如果用户已登录,然后按下刷新按钮,则这将导致重定向回登录页面,因为在Firebase返回一些数据之前没有用户。

// Auth guard 
canActivate() { 
    if (!this.userService.getCurrentUser()) { 
     return false 
    } 
    return true 
} 

getCurrentUser(): User { 
    return this.currentUser 
} 

const APP_ROUTE: Routes = [ 
    { path: '', redirectTo: '/login', pathMatch: 'full' }, 
    { path: 'login', component: LoginComponent }, 
    { path: 'register', component: RegisterComponent }, 
    { path: 'somePath', component: SomeComponent, canActivate: [AuthGuard] }, 
    { path: 'somePath2', component: SomeOtherComponent, canActivate: [AuthGuard] }, 
    { path: '**', redirectTo: '/login' }, 
] 

,我能想到的最简单的解决方法是创建一个本地存储来存储所使用的信息,并在需要时检查它在那里。 不过,我担心这种方法,用户有可能进入本地存储和例如,改变公司2将允许访问其他公司的数据

有没有一种方法来安全地存储在本地数据存储没有我的关注?

+0

在security.stackexchange.com上,这个问题可能会更好。也就是说,如果有人可以通过相对基本的URL操作查看他们不应该能够访问的数据(使用JSON格式),那么您需要提高服务器端的安全性 - 这并不是真的你可以在打字稿中解决一些问题。 – Katana314

回答

2

由于JavaScript是一种解释型语言,用户可以访问整个客户端代码,因此使用TypeScript(基本上是JavaScript)在安全性方面存在问题。

因为这个原因,像客户端加密的解决方案是行不通的,因为你需要在某个时刻,这意味着你的客户端将代码破译文件,这使得该代码提供给恶意用户数据。

阅读this article,它进一步探讨了这个问题,并提出了几个可能对您有所帮助的选项。

+0

这是否意味着用户将有权访问我的firebase配置详细信息,例如keysinside我的app.module.ts,如apiKey,authDomain,databaseUrl等等?虽然Firebase文档告诉我要放在那里 – ErnieKev

0

Firebase具有内置的安全模型,通过它可以为数据库中的节点定义自定义访问级别。这由JWT支持,JWT依靠服务器签名的令牌来编码用户的权限。如果令牌被篡改或修改,整个事情就会失效。因此,如果您在Firebase方面正确实施安全性,则修改本地存储数据的用户应该完全没有问题。