2009-07-13 103 views
6

我一直在试图为我正在开发的网站进行安全登录。进行安全登录

我只是不能得到它的工作,我使用MySQL数据库与PHP。

我可以使窗体添加用户以及他们对数据库的信息,但我似乎无法使它的登录工作。

什么类型的加密与HTML <input type="password">一起使用?

如何让用户在访问我的网站期间保持登录状态?

我该如何安全地检查它是否与用户名匹配的正确密码?

我一直在做PHP的,也许一年了,我只是还没有认识到这部分又是那么这将是很好的了解。

+1

不知道为什么你得到一个downvote。 +1 – 2009-07-13 15:01:56

回答

11

使用何种类型的加密 html < input type = password> ??

无。输入只是屏蔽以防止“查看监视器”攻击。

如果您想要安全性,请通过HTTPS(使用SSL的HTTP)传输您的数据。

如何让用户在访问我的网站期间保持登录状态?

大多数人都使用cookies。

我该如何安全地检查它是否与用户名匹配的正确密码?

安全地?

请勿使用共享服务器。按照常规步骤保持该服务器上的数据安全。将密码存储为散列值,而不是纯文本。

检查?

将提交的密码转换为匹配的散列,然后进行正常比较。假设你将数据存储在数据库中,那么只需SELECT FROM用户WHERE user =? AND密码=?并计算你回来的行数。

+6

+1“查看监视器”攻击 – 2009-07-13 14:57:56

+0

因此,共享服务器是否包含godaddy提供的mysql数据库?也如何使我的网站https而不是http,它涉及ssl? – techy 2009-07-13 14:58:41

2

我将解决您的问题的密码保护部分。

没有内置密码输入类型的加密。浏览器会像其他所有内容一样以纯文本格式提交。有两种方法可以保护密码。

首先是建立一个challenge/response system但这将需要使用JavaScript来工作。基本上你需要用户的密码,如果存储在服务器上的方式是应用散列函数,那么你需要一个服务器质询令牌,然后用新的散列值加密密码值。服务器将采用它的密码值并应用挑战。如果它们匹配,则密码是正确的,并且任何人都无法知道实际密码是什么。这需要JavaScript,因为如果此方法有效,必须在客户端生成哈希。

另一个更简单的选择,是要求HTTPS在日志中的网站的一部分。

1

正如大卫说,在默认情况下没有密码的加密,使用https保持加密。

为了使您的用户登录,在登录页面,检查他们对什么是存储在数据库中的密码。您应该散列您的密码,并将散列的密码存储在数据库中(请参阅crypt)。然后当用户登录时,从用户中散列密码,并将其与数据库中的散列密码进行比较。当它们匹配时,登录,否则登录失败。如果你的分贝受到了威胁,至少他们没有密码。

保持用户登录,检查完密码后,在会话中设置一个变量,即

$_SESSION[loggedin] = true. 

在每次请求,检查这个会话变量,如果这是真的,允许访问如果该页面为假,则将用户重定向至登录页面,其中

header("Location: /login.php"); 
0

密码输入未加密。如果你不想存储明文密码(由表单返回),你应该运行php和mysql提供的几个函数之一。看看php的md5sha1,或MySQL用于存储密码的encrypt

然后,以检查他们是否输入了正确的密码登录,您可以使用他们入境任何加密方法,从数据库中检索哈希密码并进行比较。 (另请参阅salting passwords

要拥有持久登录会话,您可以使用php的$_SESSION变量。或setcookie()