2016-08-29 74 views
-1

我有一个小网站使用Html,Css,Javascript和PhP。该网站包含一个用户必须输入密码的基本登录页面。然后将所述密码发送到php,然后使用SHA-512对其进行加密并将其添加到数据库中。我应该在Javascript还是在后端加密登录密码?

所以我开始想知道。这是做事的首选方式吗?我认为这可能会更好,如果我使用JavaScript加密密码,并发送到PHP时,它已经加密。至少这样,原始密码不会在POST请求中。

但这真的是正确的方法吗?如果任何人都能看到我使用的是什么类型的加密,这不是一件坏事吗?

+1

正确的方法是使用HTTPS来保护传输过程中的密码,并使用服务器端为密码创建的慢哈希算法(* not * SHA256,或任何其他SHA家族成员,这些都是快速哈希,并且不要有盐)。 –

+0

@ AlexanderO'Mara我正在使用HTTPS。我只是想知道散列应该在哪里完成。无论是什么散列。 – TheCrafter

+1

你不应该使用简单的散列函数来保护你的用户密码。你需要使用像PBKDF2,bcrypt,scrypt和Argon2这样强大的散列方案。一定要使用高成本因子/迭代次数。选择成本是很常见的,因此一次迭代至少需要100ms。查看更多:[如何安全地哈希密码?](http://security.stackexchange.com/q/211/45523) –

回答

1

你必须认识到,加密东西客户端不解决任何问题。当您发送加密的内容并且服务器使用它来验证用户时,该加密值就成为事实上的密码。攻击者只需要拦截请求,读取加密的密码并再次发送相同的请求。 通过加密客户端没有什么收获。

首选的解决方案是存储腌制密码哈希服务器端,发送未加密的凭据但使用SSL/TLS,然后计算发送的凭据服务器端的哈希值并将它们与存储的哈希值进行比较。

也许到这里看看:

会话管理小抄 - OWASP https://www.owasp.org/index.php/Session_Management_Cheat_Sheet

+0

你是对的我明白了!谢谢。 – TheCrafter

0

说密码,然后发送到PHP,这反过来,将其加密使用SHA-512,并将其添加到数据库。

而不是想学习how to store passwords safely

我认为这可能会更好,如果我使用JavaScript加密密码,并发送到PHP时,它已被加密。至少这样,原始密码不会在POST请求中。

参见:Javascript Cryptography Considered Harmful。 TLS是这个问题的正确解决方案,许多其他人都喜欢它。

+1

感谢您提供的答案和链接。他们非常有帮助! – TheCrafter