检查代码是否受到保护

问题描述:

我已经在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 –

你的代码非常脆弱。 首先,您不必使用mysql_ *函数,因为它们在新的php版本中被弃用和删除。 改为使用PDO或mysqli。 然后你必须逃避每个输入,这是投入查询。使用像mysqli_real_escape_string这样的函数,或者在mysqli OOP语法中使用$ db-> real_escape_string(); 或使用准备好的陈述,它们非常安全并具有其他一些优点。 我不确定,为什么通过POST获取数据库密码,我认为在大多数情况下,您只需将它写入php代码或配置文件即可。

+0

在数据库密码中使用POST的想法是,在访问者被要求提供密码的形式下,该密码是数据库密码。我认为这将作为认证以及防止黑客。它会增加安全性吗? –

+0

问题在于,当您不使用https连接时,可能会嗅探到您的数据库密码。通常,Web应用程序的用户不应该知道数据库密码,他应该使用自己的密码登录自己的密码 – Unlikus

+0

此表单只能由创建站点数据库的人员访问,因此密码将只有2人 –