我一直在尝试为我正在开发的网站进行安全登录。
我不能让它工作,我使用MySQL的MySQL数据库。
我可以让表单将用户及其信息添加到数据库中,但我似乎无法使其与登录一起使用。
HTML <input type="password">
使用什么类型的加密?
如何在用户访问我的网站时保持用户登录?
我如何安全地检查它是否是与用户名匹配的正确密码?
我一直在做PHP一年,我还没学会这个部分,所以很高兴知道。
答案 0 :(得分:11)
使用什么类型的加密 html&lt;输入类型=密码&gt; ??
无。输入被屏蔽以防止“查看监视器”攻击。
如果您需要安全性,请通过HTTPS(使用SSL的HTTP)传输数据。
如何在用户访问我的网站时保持用户登录?
大多数人都使用cookies。
我如何安全地检查它是否是与用户名匹配的正确密码?
牢固?
不要使用共享服务器。按照正常步骤保持该服务器上的数据安全。将密码存储为哈希值,而不是纯文本。
检查?
将提交的密码转换为匹配的哈希值,然后正常比较。假设您将数据存储在数据库中,只需SELECT FROM users WHERE user =?和密码=?并计算你得到的行数。
答案 1 :(得分:2)
我将解决您问题的密码保护部分。
密码输入类型没有内置加密功能。浏览器将像其他所有内容一样以纯文本形式提交。有两种方法可以保护密码。
首先是设置challenge/response system,但这需要Javascript才能运行。基本上你接受用户的密码,如果它是存储在服务器上的方式,则应用散列函数,然后你获取服务器质询令牌并为新散列加密密码值。服务器将获取密码的值并应用挑战。如果匹配密码是正确的,任何人都无法知道实际密码是什么。这需要javascript,因为如果要使这种方法有效,必须在客户端生成散列。
另一个更简单的选择是为站点的登录部分要求HTTP。
答案 2 :(得分:1)
正如David所说,默认情况下没有密码加密,请使用https来保持加密。
要让您的用户登录,请在登录页面上根据数据库中存储的内容检查其密码。您应该对密码进行哈希处理,并将哈希密码存储在数据库中(请参阅crypt)。然后,当用户登录时,从用户散列密码,并将其与数据库中的散列密码进行比较。匹配时,请登录,否则登录失败。如果您的数据库遭到入侵,至少他们没有密码。
为了让用户登录,在检查密码后,在会话中设置一个变量,即
$_SESSION[loggedin] = true.
在每个请求中,检查此会话变量,如果为true,则允许访问该页面,如果为false,则将用户重定向到登录页面
header("Location: /login.php");
答案 3 :(得分:0)
密码输入未加密。如果您不想存储明文密码(由表单返回),您应该运行php和mysql提供的几个函数之一。检查php的md5,sha1或mysql的encrypt来存储密码。
然后,要检查他们是否输入了正确的密码进行登录,您可以在其条目上使用任何加密方法,从数据库中检索散列密码并进行比较。 (另外,请查看salting passwords)
要拥有持久登录会话,您可以使用php的$_SESSION变量。或setcookie()