受JavaScript密码保护的网站

时间:2010-08-24 16:32:30

标签: javascript algorithm passwords

我有一个简单/愚蠢或不是:)的问题。换句话说,我不知道是否公平或完全是愚蠢的想法。只是一些自由的想法。

如果我通过JavaScript进行登录(如果我知道),该怎么办?但是安全哈希算法将通过密码。例如:

我使用SHA生成一个看起来像

的传递
var = 0xc1059ed8... //etc

并粘贴到代码中。还有两个功能。一个将比较两个值(由我与用户给出),第二个将生成sha形式用户的输入。

这在理论上是否安全,或者这是一种可怕的模式和愚蠢的想法? JS可以处理吗?

编辑:我并不是说像银行业务那样严重的认证。就在我有我的照片并且只想要几个人看他们时,地球上99.9%的人不能看他们:) thx回复

7 个答案:

答案 0 :(得分:9)

抱歉,没有骰子:)单独使用客户端Javascript无法进行安全身份验证,因为可能会伪造正面身份验证结果。您总是需要服务器端实例进行身份验证。

答案 1 :(得分:3)

常见的答案是“不,你不能做客户端身份验证”和传统方案是正确的,但我至少可以想到两种方法来实现它:

  1. 使用SHA密码哈希重定向到静态HTML页面(0xc1059ed8 ... html)。只要虚拟目录不允许文件列表,就没有人能够猜出要保护的文件的名称。这虽然很快笨拙。

  2. 在Javascript中使用加密算法(AES等)的实现来解密构成页面实际内容的文本块。真的只适用于一个非常有价值的页面。

  3. 服务器端身份验证确实是最好的,但是说客户端无法完成是不正确的。

答案 2 :(得分:2)

您无法单独使用Javascript保护您的网站。您需要某种方法来验证服务器上的请求。

因为您网站的所有消费者都能清楚地看到您的所有JavaScript代码。所有潜在的攻击者都需要查看您网站的源名,他们可以绕过您的javascript密码检查位并查看其背后的内容。

您需要在服务器端实施安全性,期限结束。 ASP.NET有一种内置的方法来执行此操作,称为“表单身份验证”。或者你可以在php脚本中使用Session变量。

答案 3 :(得分:1)

无论如何,您的JS源将是可见的,任何人都可以轻易伪造它。您必须进行服务器端验证

答案 4 :(得分:0)

由于哈希将驻留在用户的计算机上(在浏览器中),我会说这是一个糟糕的主意。它很容易操纵它。

答案 5 :(得分:0)

您可以使用此类模式通过纯文本链接隐藏密码,并避免https登录,但不能保持原样。

问题是攻击者可以窃取散列密码并使用该密码登录服务器,而且她不需要真正的密码。

这可以通过挑战响应来阻止,其中服务器向页面发送“盐”:一个随机密码混乱然后散列的大随机数,因此响应总是不同的。

不幸的是,这会导致服务器现在需要有明文密码,这是一个坏主意(好吧,这有一些技巧)。所以你可能不得不最终发送一个盐,哈希你的密码,通过哈希再次哈希并将其发送到服务器来混淆哈希值。服务器使用salt对用户数据库中存储的密码哈希值进行哈希处理,并对两者进行比较。

随着安全问题变得越来越复杂,在复杂的事情中潜伏着坏人。更多的原因是使用经过良好测试的模式,具有可靠记录的算法和已经仔细实施这些的库。

在任何情况下,服务器都是最终决定谁可以访问的服务器。

答案 6 :(得分:0)

你最好不要尝试进行身份验证 - 至少在某种程度上你不会给任何人带来一些危险的错觉,即可能可能是安全的。

假设您正在处理共享秘密情况,身份验证非常简单。您使用相当简单的质询 - 响应算法。基本上,客户端向服务器发送一条消息,说它要登录。服务器通过发回一个随机数来响应。客户端使用正确的密码加密该随机数,然后将其发回。服务器自身加密随机数,并将结果与​​客户端发送的结果进行比较。如果匹配,则验证成功 - 您已确认客户端具有正确的密码。

这样做的好处是:首先,密码本身绝不会以任何形式通过网络发送,因此攻击者在尝试发现密码时几乎没有任何材料可用。其次,由于服务器为每次登录生成一个新的随机数,因此攻击者无法通过重新发送从先前登录中捕获的数据包来成功进行身份验证。

几乎任何对安全有任何期望的服务器都已经内置了类似的内容。这纯粹是设置客户端与您关心的服务器支持的表单正确交互的问题。