2016-04-24 113 views
0

我正在制作一个自定义存储页面来存储信息。关于用户名和密码安全

<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

+0

您正在将用户名和密码存储在数据库中,但是登录会根据if语句中的硬编码值进行验证吗?不明白设置。 – JazzCat

+1

您应该只存储散列和saltet密码,以便查看phps password_verify函数,并且您应该使用HTTPS。 –

+0

@JazzCat它只是一个占位符,在我做之前 – Innervisions

回答

1

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

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

我不会扩大你的答案使用一个数据库,但在这里它是静态设置应至少帮忙解释一下我的意思是:

<?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代替。

希望这会有所帮助!

+0

如果他们能够访问源代码,那么您已经有了更多的问题。 – ceejayoz

+0

怎么样sql注入 –

+0

@SanoojT问题中没有显示SQL。 – ceejayoz