关于用户名和密码安全
问题描述:
我正在制作一个自定义存储页面来存储信息。关于用户名和密码安全
<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 database.When形式发送它去
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 } ?>
所以这里的主要问题是,这实际上是安全的吗?或者我应该寻找一个更好的方式来做到这一点
我打算继续登录为用户保留$用户和$密码在$ _SESSION,直到用户访问注销的方式.php这将清除SESSION
我的代码实际上工作,它的罚款。
我只想知道这是否安全? 注:用户和密码是暂时的占位符它不会是12345
答
这里的问题是,如果任何人都能够访问你的源代码(这是一个重大的风险,如果您共享您的主机与其他用户/站点)可以看到密码是什么。
推荐的存储密码的方法是使用单向散列 - 也就是说只存储加密版本的密码。这通常会将密码以加密的形式存储在数据库中,然后您将使用相同的方法对用户的输入进行加密,并根据数据库中的加密形式进行检查。
我不会扩大你的答案使用一个数据库,但在这里它是静态设置应至少帮忙解释一下我的意思是:
<?php
$user = $_POST["username"];
$pass = $_POST["password"];
?>
<?php if ($user == "Admin" && sha1($pass) == "8cb2237d0679ca88db6464eac60da96345513964"){ ?>
//form.php content goes in here
<?php }else{ ?>
<span>Wrong password</span>
<?php } ?>
请注意,我在这里使用SHA1加密,有plenty of others to choose from除此之外。还请注意,8cb2237d0679ca88db6464eac60da96345513964
是由sha1("12345")
返回的散列。
附加:
正如在评论中提到,SHA1不再推荐,我在这里使用它的语法简单;在生产环境中考虑使用password_hash with bcrypt代替。
希望这会有所帮助!
您正在将用户名和密码存储在数据库中,但是登录会根据if语句中的硬编码值进行验证吗?不明白设置。 – JazzCat
您应该只存储散列和saltet密码,以便查看phps password_verify函数,并且您应该使用HTTPS。 –
@JazzCat它只是一个占位符,在我做之前 – Innervisions