使用简单if语句的密码

时间:2015-03-28 07:14:00

标签: php security if-statement

如果这是重复的话,我道歉,我尝试搜索这个并且找不到我正在寻找的内容。

好吧,假设我有一个像这样的代码

<?php 
$user = $_POST['username'];
$pass = $_POST['password'];

if ($user == "admin" && $pass == "password")
{
   echo "Password correct";
}

else
{
   echo "Password incorrect";
}
?>

这种用户名/密码验证方法的效果如何? 我知道这不是最好的方法,但为什么不呢?怎么会有人破解这个?

我见过一些像这样的例子

<?php 
$user = $_POST['username'];
$pass = $_POST['password'];

if ($user == "admin" && $pass == "password")
{
   include "correct.html";
}

else
{
   echo "Password incorrect";
}
?>

但我知道会更糟糕,因为有人可以直接访问“correct.html”文件并绕过初始安全检查。但是,通过使用echo,他们能够绕过用户名/密码检查吗?

1 个答案:

答案 0 :(得分:1)

不要这样做。切勿将密码作为纯文本值进行比较。

人们可以通过多种方式入侵支持代码的各种系统(Db,PHP等),密码散列点是 IF 您的数据库内容是共享的您的数据库用户无法分解。

  • 如果您的密码是硬编码值,则除手动外无法更改。

  • 如果您的密码是硬编码值,并且您的文件以某种方式被复制/下载或类似,那么这可以共享和泄露(虽然在这种情况下,这将低于您的关注列表,说实话)。

  • 如果密码保存在数据库中,则需要对 进行哈希 。请阅读http://php.net/manual/en/function.password-hash.php密码哈希,因为它在PHP5中是一个有用的PHP函数

您正在显示的内容实际上可能是验证用户的最糟糕方式。

谷歌你的问题,你会发现很多更好的描述为什么你永远不应该将密码保存为纯文本值。

WHY

为什么加密密码?因为人们很愚蠢,可以在facebook,google +,hotmail,gmail等等网站上选择自己密码的人通常会选择&#34; F45G5N__lksZX112b&#34;作为他们的密码,而是选择他们可以(因而其他人可以)容易记住的东西,例如&#34; foxtrot69&#34;等等。

人们也很少使用不同的密码进行不同的登录,人们可能会对同一密码使用不同的变体 - 例如#34; Foxtrot69&#34;

这意味着,如果您通过SQL hack或类似方法将人们的密码以纯文本格式提供给您的网站,请说您有2000行被盗,那2000个密码,以及其他信息,如电子邮件地址或姓名/邮政地址,黑客/攻击者随后使用详细信息尝试攻击其他人的其他在线帐户变得容易指数,

例如:

User 1 of 2000:
name: Bob Dimond
email: diamondGeezer@gmail.com
password: rubmeup11
address: duke Town, illanois

有了这个黑客,黑客/攻击者可以尝试用户名和密码登录他们的Gmail帐户,这可能会失败,也许他们的Gmail帐户密码是rubmeup69,但他们也可能有一个hotmail帐户{ {1}}使用该密码。然后gmail将在忘记的密码例程上说,&#34;将密码发送到另一个地址&#34;可能是hotmail地址,因此即使不知道gmail密码文本,攻击者也因为 您未能加密用户详细信息 而绕过了安全措施。

一旦进入他的gmail帐户,黑客就可以登录并获取所有内容,facebook,soundcloud等等的重置密码。

有了2000个被盗帐户的详细信息(假设)这种交叉验证方法的成功率约为7-9%,但我前面提到的一些报道提到如果他们有破解脚本,它可能高达~17%使用类似的文本密码(例如

)发送电子邮件登录
diamondgeezer@hotmail.com

因此,您的失败可能会导致您的2000个用户遭受200-250的妥协。

上面的例子是一个简化,但你应该看到这样的方法可以让黑客真正成为密码的明确起点,真正减少他们在破解其他系统上的违规​​用户帐户时的时间费用

这就是为什么你应该总是加密你的密码

相关问题