时光不老我们不散,天不会不蓝,我不会不在。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了时光不老我们不散,天不会不蓝,我不会不在。相关的知识,希望对你有一定的参考价值。

意思:表白恋人,无论时光流转,不离不弃,海枯石烂心不变。我永远爱你! 参考技术A 你好 很高兴为你解答

朋友 这是一段歌词吧

这说的比唱的还好听呢

但愿你们能够天长地久
参考技术B 真正有这个的朋友或亲人,是值得珍惜的,祝你们友谊地久天长,永远幸福 参考技术C 祝友谊天长地久
好朋友之间就是这样的

如何在不散列 SQL 中的密码的情况下登录? [复制]

【中文标题】如何在不散列 SQL 中的密码的情况下登录? [复制]【英文标题】:How to login without hash the password in SQL? [duplicate] 【发布时间】:2019-05-28 15:10:17 【问题描述】:

下午好!我自己在一个安全项目中工作。我在检查 PHP 中的登录代码时遇到问题。我不知道为什么,但是当我尝试使用我创建“数据库中的密码是纯文本”的用户登录时,它说密码不正确。

我们的想法不是将密码转换为哈希值。我知道这是一个很大的安全风险,但显然我不会将它用于专业用途。我的目的是进行安全测试。

检查.php:

        <?php
    include 'conn.php'; 

    $conn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
    // Check connection
    if (!$conn) 
        die("Connection failed: " . mysqli_connect_error());
    

    $name = $_POST['name']; 
    $password = $_POST['password'];

    $result = mysqli_query($conn, "SELECT Name, Password FROM users WHERE Name = '$name'");

    $row = mysqli_fetch_assoc($result);

    if (password_verify($_POST['password'], $row['Password']))     

        $_SESSION['loggedin'] = true;
        $_SESSION['name'] = $row['Name'];
        $_SESSION['start'] = time();
        $_SESSION['expire'] = $_SESSION['start'] + (1 * 60) ;                       

        echo "<div class='alert alert-success' role='alert'><strong>Welcome!</strong> $row[Name]            
        <p><a href='edit-profile.php'>Edit Profile</a></p>  
        <p><a href='logout.php'>Logout</a></p></div>";  

     else 
        echo "<div class='alert alert-danger' role='alert'>Name or Password are incorrects!
        <p><a href='login.html'><strong>Please try again!</strong></a></p></div>";          
       
?>

编辑我已经纠正了错误,但我仍然无法登录,出现一条消息:“名称或密码不正确!”。在我的数据库中,我有 4 列没有散列信息。 ID、姓名、电子邮件、密码

【问题讨论】:

password_verify() 无法处理纯文本密码存储。它是为完全相反的任务而设计的。 如果要比较纯字符串,请使用===strcmp,而不是pw_verify。这样做的理由完全是虚假的,顺便说一句。缺少参数绑定也是如此。 我记得早些时候关闭了一个完全相同的问题,而您没有没有按照所有重复项中的步骤“完全正确”。 警告:编写自己的访问控制层并不容易,而且有很多机会会严重错误。当任何现代的development framework(如Laravel)带有强大的authentication system 内置时,请不要编写自己的身份验证系统。 注意:mysqli 的面向对象接口明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的mysql_query 接口混淆。在您对程序风格投入过多之前,值得转换一下。示例:$db = new mysqli(…)$db-&gt;prepare("…") 程序接口是 PHP 4 时代引入的 mysqli API 的产物,不应在新代码中使用。 【参考方案1】:

如果数据库中的密码以纯文本形式存储,那么问题在于password_verify() - 如explained in the manual - 期望它的第二个参数是(我引用):

password_hash() 创建的哈希。

该函数将尝试以与假设 $row 变量已散列相同的方式散列 $_POST 变量,然后将散列后的 $_POST 变量与 $row 变量进行比较。显然,这永远不会导致有效匹配,因为 $row 变量不是有效的哈希。

这个函数不是对给定的字符串进行简单的直接比较。如果你想这样做,只需写if ($_POST['password'] === $row['Password']),不需要额外的功能!

【讨论】:

嗨@ADyson,感谢您的帮助,但它仍然无法工作的代码“出现一条消息说“名称或密码不正确!”,也许我必须更改其他内容......如果你是这样亲,如果一切正常,你能检查一下代码吗?我已经在这里上传了代码:sandbox.onlinephpfunctions.com/code/…。 @DaZ 代码看起来应该可以工作。可能很简单,比如不使用正确的数据值,或者不通过 POST 发送数据。我不知道您要提交什么数据或数据库中有什么。你做了什么调试?使用一些var_dump() 语句将变量的值输出到屏幕上,以便您检查它们是否包含您所期望的。 @DaZ 另外请不要用半固定的代码更改问题 - 现在这里的答案没有多大意义。将问题恢复原状,或者至少包括原始代码以及您编辑的版本。谢谢。 好的,让我换个问题【参考方案2】:

您已向我们展示了读取密码(或无法读取)的代码。但是您向我们展示了填充密码的代码,也没有告知您检查的数据是否符合您的预期。

虽然我知道您还不想走密码散列路线,但您确实应该了解一些有关 Web 应用程序安全性的知识。您将能够通过提供用户名来登录

 any' OR '1'='1

有一个用于 SQL 注入的谷歌。

您的代码中没有错误检查/处理。对 MySQLi 的每个调用都应该有一个与之关联的错误处理程序。

您可以通过将生成的 SQL 写回浏览器并通过 mysql 命令行客户端或 PHPMyAdmin 运行它来检查它是否返回任何数据来开始解决您的问题。您还应该在代码中检查查询是否返回了零或一条记录(并相应地处理每种情况)。

如果您没有学习调试,那么您就没有学习编程。

    $_SESSION['loggedin'] = true;
    $_SESSION['name'] = $row['Name'];
    $_SESSION['start'] = time();
    $_SESSION['expire'] = $_SESSION['start'] + (1 * 60) ;

只有“name”变量应该设置为会话变量。

【讨论】:

【参考方案3】:

在您的情况下,您不能使用 password_verify() 因为它仅用于散列密码(通过 password_hash ())

你必须检查密码像

if ($password == $row['password']) 

【讨论】:

嗨@balzacLeGeek,感谢您的帮助,但它仍然无法工作的代码“出现一条消息说“名称或密码不正确!”,也许我必须更改其他内容......如果你是这样亲,如果一切正常,你能检查一下代码吗?我已经在这里上传了代码:sandbox.onlinephpfunctions.com/code/…

以上是关于时光不老我们不散,天不会不蓝,我不会不在。的主要内容,如果未能解决你的问题,请参考以下文章

时光不老,我们不散的下一句是啥?

时光不老我们不散啥意思 怎么理解时光不老我们不散的意思

时光不老,我们不散珍惜友情的说说

“时光不老,我们不散”这句话是啥意思??一直不是很理解,哪位帮我分析分析,

时光不老我们不散这句话是啥意思 时光不老我们不散这句话解释

时光不老我们不散感谢朋友的唯美句子收藏五十三条