2017-02-14 67 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方面正確實施安全性,則修改本地存儲數據的用戶應該完全沒有問題。