2013-02-14 126 views
4

我想创建一个安全的登录,所以我想加密密码,然后我将它作为POST参数发送。我正在做一个SHA1的JavaScript函数。简单安全的登录php/javascript

然后我意识到如果有人拦截了加密的密码,他可以马上使用它。将其作为发布参数发送到相同的URL。

如何确保密码来自登录输入字段?也许用PHP会话?我不想使用安全的http。任何人有一个简单的选择?

回答

10

如何确保密码来自登录输入字段?

你不行。

最接近的是通常针对CSRF的防御...但这只会阻止用户欺骗用户将数据从其网站提交到您的网站。它不会保护密码。

我不想使用安全http呢。任何人有一个简单的选择?

HTTPS 的简单选项。

+0

是的,但你必须购买证书...等。我正在为3个用户创建一个应用程序...通过IP检查将是一个选项,但它总是令人讨厌,因为通常你想从任何地方访问 – de3 2013-02-14 17:00:10

+0

证书是很便宜的。如果您想自己处理您的授权密钥的分配,您甚至可以自行签名。 – Quentin 2013-02-14 17:02:03

+0

StartSSL对简单证书是免费的。 – dlp 2013-02-14 17:03:27

3

通过网络发送SHA1密码到您的服务器有效地使SHA1散列成为真正的密码。

除了没有优势,你实际上使你的安全更糟;如果我用SHA1哈希来窃取数据库,我现在可以直接使用这些哈希来登录,而无需强制哈希来获取“真实”密码。

HTTPS是确保以纯文本形式发送密码的唯一方法。在转移到HTTPS时,请确保将这些SHA1散列更改为bcrypt。

如果您担心额外的SSL证书费用,如果您不担心浏览器错误或愿意将证书添加到受信任列表(http://resources.arcgis.com/en/help/main/10.1/index.html#//0154000005q6000000)中,也可以生成自签名证书。

3

唯一可能帮助你的是为每个会话创建临时盐,然后在客户端加密密码,然后使用保存在服务器端的相同salt解密密码,该方法就像一个独特的令牌,用于防止CRSF,因为即使是中间人捕获密码也不能解密密码。

最后,您需要创建另一个(不同的算法)来保存数据库上的密码,上面的概念思想是为了保护客户端和服务器之间的密码。

解释:

客户端 - >请求 - >服务器

服务器 - >响应(发送独特盐ö与JavaScript中使用等的session_id()) - > 客户

客户端 - > JavaScript执行 - >采用独特的盐

客户端加密密码 - > POST - >服务器

丝氨酸ver - >用保存的盐解密密码 - >提取密码

我希望有人能纠正我,如果上面的想法是错误的!

注: AES可同时用于JS和PHP

盐=关键

可用工具:

AES Advanced Encryption Standard

jsaes: AES in JavaScript

PHP AES DEC/ENC

phpAES

-1

请在通过非加密HTTP发送密码之前,先向全球和您的所有客户倾诉并继续加密密码。

这个问题有两个方面,在这种情况下双方都是你自己和你所服务的客户。不幸的是,大多数人在许多网站上使用相同的密码,事实上我们没有内存容量来处理我们用数百个密码登录的匹配数百个网站,我们作为最终用户选择了两三个,并继续我们的生活。如果您通过HTTP向客户发送密码而无需先加密密码,并且事实上有所收获,那么您肯定会做错。相信你的客户他们的密码,可能与他们登录银行的密码相同,不会落入黑客或甚至更重要的是任何与网站开发有关的人的手中,因为恶作剧的IT员工确实存在并且它很容易捕获这些密码,因为它们发送到您的应用程序在服务器端进行处理...

我不想考虑有多少web开发人员阅读本文,并决定在客户端加密,应该是我们所做的第一件事情之一,它是对用户的保护,而不是对你自己的保护......保护你的数据库可以通过多种程序来完成,并且每个安全分析师都有他们对要做什么或不做的看法,盐渍-spunked-跷着 - 不管。客户端加密不应该被辩论。

+0

你能否将你的答案改为减少敌意/要求?尊重提问者是这里的核心租户。 – 2015-08-07 19:14:23

+0

这个问题是两岁,与一个公认的答案和其他最新答案。此外,这不能回答这个问题。 – Blubberguy22 2015-08-07 19:35:50