Php 带有简单if语句的密码

Php 带有简单if语句的密码,php,security,if-statement,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")
{
   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";
}
?>

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

我见过这样的例子

<?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,他们是否能够绕过用户名/密码检查?

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

人们可以通过多种方式侵入支持您的代码的各种系统(Db、PHP等),密码散列的要点是如果您的数据库内容被共享,那么您的数据库用户就无法被入侵

  • 如果密码是硬编码值,则只能手动更改

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

  • 如果密码保存在数据库中,则需要对其进行哈希处理。请阅读密码哈希,因为它是PHP5中一个有用的PHP函数

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

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

为什么? 为什么要加密密码?因为人们都很愚蠢,那些可以在facebook、google+、hotmail、gmail等网站上选择自己密码的人将通常选择“F45G5N_u_ulkszx112b”作为他们的密码,而不是选择他们可以(因此其他人也可以)容易记住的东西,比如“foxtrot69”,等等

人们也很少会对不同的登录使用不同的密码,人们可能会对同一密码使用不同的变体,例如“Foxtrot69”

这意味着,如果您通过SQL黑客或类似方法以纯文本格式向您的网站泄露用户密码,比如说您有2000行被盗,即2000个密码,以及其他信息,如电子邮件地址或姓名/邮政地址,黑客/攻击者利用这些细节试图侵入该人的其他在线帐户,变得非常容易

例如:

User 1 of 2000:
name: Bob Dimond
email: diamondGeezer@gmail.com
password: rubmeup11
address: duke Town, illanois
黑客/攻击者可以尝试使用用户名和密码登录他们的gmail帐户,这可能会失败,也许他们的gmail帐户密码是
rubmeup69
,但他们也可能有hotmail帐户
diamondgeezer@hotmail.com
使用该密码。然后gmail会在忘记密码的例行程序中说,“将密码发送到另一个地址”,这可能是hotmail地址,因此在不知道gmail密码文本的情况下,攻击者绕过了安全性,因为您未能加密用户的详细信息

一旦进入他的gmail帐户,黑客就可以登录并获得所有东西的重置密码,如facebook、soundcloud等

对于2000个被盗帐户详细信息(假设),这种交叉验证方法的成功率约为7-9%,但我之前读过的一些报告提到,如果他们有脚本使用类似的文本密码(如

attempt 1 = rubmeup11
attempt 2 = RubmeUp11
attempt 3 = RubMeUp11
attempt 4 = rubmeup12
... 
因此,你的失败可能会导致2000名用户中的200-250人妥协

上面的例子是一个简化的例子,但是你应该看到一种方法,它为黑客提供了一个经过验证的密码起点,这真的,真的减少了他们在其他系统上破解违规用户帐户的时间开销


这就是为什么你应该始终加密密码的原因

我知道这是一种糟糕的做法。。我想知道的是,为什么它这么差?这仅仅是因为它没有散列,因此,如果获得未经授权的访问,可以查看密码吗?是的。我相信有很多关于这个主题的文章,试试这个:在原始问题/代码中,几乎唯一的漏洞就是缺少密码加密?从理论上讲,如果你以某种方式神奇地将
$pass==“password”
进入
$pass==一个神奇的不可读/隐藏字符串