2013-03-16 79 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

相关问题