检查代码是否受到保护
我已经在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。
你的代码非常脆弱。 首先,您不必使用mysql_ *函数,因为它们在新的php版本中被弃用和删除。 改为使用PDO或mysqli。 然后你必须逃避每个输入,这是投入查询。使用像mysqli_real_escape_string这样的函数,或者在mysqli OOP语法中使用$ db-> real_escape_string(); 或使用准备好的陈述,它们非常安全并具有其他一些优点。 我不确定,为什么通过POST获取数据库密码,我认为在大多数情况下,您只需将它写入php代码或配置文件即可。
在数据库密码中使用POST的想法是,在访问者被要求提供密码的形式下,该密码是数据库密码。我认为这将作为认证以及防止黑客。它会增加安全性吗? –
问题在于,当您不使用https连接时,可能会嗅探到您的数据库密码。通常,Web应用程序的用户不应该知道数据库密码,他应该使用自己的密码登录自己的密码 – Unlikus
此表单只能由创建站点数据库的人员访问,因此密码将只有2人 –
你应该看看绑定的参数和使用PDO库,这是这里的最佳实践。使用字符串插值创建查询不是要走的路。 http://php.net/manual/en/book.pdo.php –