2016-04-24 150 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