2013-03-16 77 views
1

我有一個簡單的HTML5/JavaScript站點,它可以讀取包含電子郵件帳戶配置的本地(至應用程序)XML文件,並使用單一登錄功能在單個頁面上顯示來自多個郵件帳戶的郵件。本質上來說,一個郵件合併器。問題是,這個網站託管在一個由Web主機管理的共享服務器上的雲中。我不想在配置文件中以純文本保存電子郵件帳戶憑據。我正在努力想出一個合理安全的解決方案,但迄今爲止還沒有運氣。如何在共享服務器上安全地存儲用戶名和密碼?

我可以對XML文件中的憑證進行加密,但是我看不到如何在JavaScript代碼中沒有明確解密路徑的情況下實現密鑰。

我不是在這裏要求代碼,而是幫助指出我在正確的方向設計一種方法來實現這一點。人們如何去做它,以便主機上的一些技術人員不能簡單地打開我的網站中的文件並訪問電子郵件帳戶?

+2

如果你不信任你的主機,我認爲你不能獲得任何安全。 – Bergi 2013-03-16 18:41:11

+0

如果您實際上沒有託管任何受保護的數據,我會考慮使用其中一種本地存儲機制,並認爲任何數據傳輸本質上不太安全。您是否有責任確保這些數據的真實原因? – technosaurus 2013-03-16 19:05:04

+0

@Bergi:信任是一個相對的詞。我只相信我的主人和我必須信任的東西,不再有。他們的人可能是最直接的,但他們不可能。 – 2013-03-17 14:58:18

回答

0

您應該使用SHA256哈希來加密和散列要加密的數據。

新用戶:

  1. 驗證密碼
  2. 鹽和散列密碼
  3. 存儲在您的文件哈希

當登錄:

  1. 哈希密碼
  2. 比較哈希散列存儲在文件

這裏有更多的細節鏈接:

http://crackstation.net/hashing-security.htm

+0

也不會幫助,如果你需要明文密碼,正如我所理解的OP一樣。 – deceze 2013-03-16 18:06:01

+0

@deceze,整點是OP不**,希望密碼以純文本形式存儲。當用戶登錄時,您不會將純文本密碼與文件進行比較,您會將散列密碼與文件中的散列進行比較。 – Jess 2013-03-16 18:25:15

+0

@Mr。鮑勃L.頭,希望你找到我的答案有幫助。我的鏈接會給你幾種語言的服務器端代碼。 – Jess 2013-03-16 18:26:38

0

如果你擔心「的託管公司的一些高科技「然後開始使用專用或虛擬服務器。

但是,如果這是超出您的預算,那麼你需要使用數據庫來記錄用戶的詳細信息和至少密碼的加密。不要將JavaScript用於任何解密,因爲它永遠不會安全。而是使用ASP,CGI,PHP等服務器端編程語言。

0

使用像php這樣的服務器端語言來進行加密和寫入。這可能是使用Ajax調用最好的方法。用戶將能夠看到被調用的腳本,但是因爲php是服務器端,即使他們訪問了該頁面,他們也無法知道XML文件的保存位置。

你真的不希望依賴於JavaScript做任何你的安全的東西,因爲它的客戶端,因此,從來沒有安全。

+2

'if(node.js == javascript && node.js!=「client side」)console.log(「you are wrong」)' – technosaurus 2013-03-16 18:53:43

1

如果我理解正確的話,你需要檢索存儲的密碼,以連接到託管的電子郵件帳戶。這意味着,你不能使用單向散列,而只能加密數據。

現在你面臨的問題,服務器必須能夠解密賬戶的相關信息,並且所有的服務器能做到的,攻擊者就可以做的一樣好。所以你需要一種方式,即服務器本身不能解密數據。

一種可能性是,您使用用戶定義的主密碼加密所有數據。永遠不要將該密碼存儲在服務器上,讓用戶在他想使用該服務時輸入該密碼。由於帳戶信息只能用此密碼解密,並且無法從服務器訪問密碼,因此帳戶信息應該是安全的。這也意味着密碼重置是不可能的。

當然存儲賬戶信息是一件微妙的事情,如果你想要這樣做的話,我真的會再想一想。有很多事情要考慮,比如SSL,XSS等等。

+0

+1,儘管你應該提及每個有權訪問服務器的人也可以抓取發送的密碼。 – Bergi 2013-03-16 21:24:38

+1

@Bergi - 當然,認爲每個登錄系統的站點都面臨着這個問題。您只能在您自己託管網站時解決此問題,但用戶必須信任您:-)。您必須在某種程度上信任主機,但至少您需要保護存儲的數據。 – martinstoeckli 2013-03-16 21:31:56

相關問題