2016-03-04 149 views
-3

我已經在PHP中使用此代碼將數據插入到數據庫中。我在注入部分非常新,我要求你檢查這些代碼是否能夠防止黑客入侵,如果沒有,請提供需要合併的適當更改。
檢查代碼是否受到保護

<head> 
      <title>abcde</title> 
    </head> 

<body> 
     <?php 
     if(isset($_POST['update'])) { 
     $dbhost = 'host'; 
     $dbuser = 'user'; 
     $dbpass = $_POST['password']; 

     $conn = mysql_connect($dbhost, $dbuser, $dbpass . "pswd"); 

     if(! $conn) { 
      die('Could not connect: ' . mysql_error()); 
     } 



$Name = $_POST['Name']; 
$XP = $_POST['XP']; 
$TH = $_POST['TH']; 

$sql = "insert into warriors (Name, XP, TH) values ('$Name','$XP','$TH')"; 
     mysql_select_db('db'); 
     $retval = mysql_query($sql, $conn); 

     if(! $retval) { 
      die('Could not update data: ' . mysql_error()); 
     } 
     echo "Updated data successfully\n"; 

     mysql_close($conn); 
    }else { 
     ?> 
<h1>My Clan Details</h1> 
      <form method = "post" action = "<?php $_PHP_SELF ?>"> 
       <table width = "400" border =" 0" cellspacing = "1" 
       cellpadding = "2"> 

        <tr><td width = "100">Password</td> 
         <td><input name= "password" type = "password" id = "password"></td></tr> 

       <tr> 
        <td width = "100">Name</td> 
        <td><input name = "Name" type = "Name" 
         id = "Name"></td> 
       </tr> 

       <tr> 
        <td width = "100">XP</td> 
        <td><input name = "XP" type = "XP" 
         id = "XP"></td> 
       </tr>    

       <tr> 
        <td width = "100">Town Hall</td> 
        <td><input name = "TH" type = "TH" 
         id = "TH"></td> 
       </tr>  
       <tr> 
        <td width = "100"> </td> 
        <td> </td> 
       </tr> 

       <tr> 
        <td width = "100"> </td> 
        <td> 
         <input name = "update" type = "submit" 
          id = "update" value = "Submit"> 
        </td> 
       </tr> 

       </table> 
      </form> 
     <?php 
    } 
    ?> 

如果可能的話,請提供鏈接/來源在那裏我可以提高我的編碼有關SQL注入。對你的寶貴時間感謝Thanx。

+0

你應該看看綁定的參數和使用PDO庫,這是這裏的最佳實踐。使用字符串插值創建查詢不是要走的路。 http://php.net/manual/en/book.pdo.php –

回答

1

你的代碼非常脆弱。 首先,您不必使用mysql_ *函數,因爲它們在新的php版本中被棄用和刪除。 改爲使用PDO或mysqli。 然後你必須逃避每個輸入,這是投入查詢。使用像mysqli_real_escape_string這樣的函數,或者在mysqli OOP語法中使用$ db-> real_escape_string(); 或使用準備好的陳述,它們非常安全並具有其他一些優點。 我不確定,爲什麼通過POST獲取數據庫密碼,我認爲在大多數情況下,您只需將它寫入php代碼或配置文件即可。

+0

在數據庫密碼中使用POST的想法是,在訪問者被要求提供密碼的形式下,該密碼是數據庫密碼。我認爲這將作爲認證以及防止黑客。它會增加安全性嗎? –

+0

問題在於,當您不使用https連接時,可能會嗅探到您的數據庫密碼。通常,Web應用程序的用戶不應該知道數據庫密碼,他應該使用自己的密碼登錄自己的密碼 – Unlikus

+0

此表單只能由創建站點數據庫的人員訪問,因此密碼將只有2人 –

相關問題