关于用户名和密码安全性

时间:2016-04-24 18:11:24

标签: php mysql forms

我正在创建一个自定义存储页面来存储信息。

<form  action="files/form.php" method="post">
            <input type="text" name="username" placeholder="Username" value="" autocomplete="off">
            <input type="password" name="password" placeholder="Password" value="" autocomplete="off">
    <input name="submit" value="Send" type="submit"></input>
</form>

所以这里是我将它设置为预先存在的用户和密码的表格,保存在MySQL数据库中。当表单发送时,它转到

form.php 文件,其中包含用户输入其信息的表单

<?php 
    $user = $_POST["username"];
    $pass = $_POST["password"];
?>
<?php if ($user == "Admin" && $pass == "12345"){ ?>
    form.php content goes in here
<?php }else{ ?>
    <span>Wrong password</span>
<?php } ?>

所以这里的主要问题是,这实际上是否安全?或者我应该找一个更好的方法来做到这一点

我计划让用户登录的方式是将 $ user $ password 保留在 $ _ SESSION 中,直到用户访问 logout.php ,这将清除 SESSION

我的代码确实有效,很好。

我只是想知道这是否安全? 注意:用户密码是占位符,目前它不会是12345

1 个答案:

答案 0 :(得分:1)

这里的问题是,如果有人访问您的源代码(如果您与其他用户/站点共享主机,这是一个主要风险)可以看到密码是什么。

存储密码的推荐方法是使用单向哈希 - 也就是说只存储密码的加密版本。这通常会以加密形式将密码存储在数据库中,然后您将使用相同的方法加密用户的输入,并检查加密的表单与数据库中的加密形式。

我不会扩展你使用数据库的答案,但这里静态设置,至少应该有助于解释我的意思:

8cb2237d0679ca88db6464eac60da96345513964

请注意,我在这里使用过sha1加密,除此之外还有plenty of others to choose from。另请注意,sha1("12345")add返回的哈希值。

<强> 其他:

如评论中所述,不再推荐使用sha1,我在这里使用它是为了简化语法;在生产环境中,请考虑使用password_hash with bcrypt

希望这有帮助!