最近有人黑了我的PHP CMS,植入了一个SQL注入。有没有办法让我的登录码更受保护,防止黑客入侵?任何帮助都是最好的,谢谢。
登录表单
<div id="loginform">
<form method="post" action="check-login.php" name="form1">
<label for="username" /><span style="color:#FFFFFF; font-family:'Trebuchet MS', Arial, Helvetica, sans-serif;">username:</span></label>
<input type="text" name="myusername" id="username"/>
<label for="password"/><span style="color:#FFFFFF; font-family:'Trebuchet MS', Arial, Helvetica, sans-serif;">password:</span></label>
<input type="password" name="mypassword" id="password"/>
<label for="submit"></label>
<input type="submit" name="sumbit" value="Login">
</form>
</div>PHP
mysql_connect ($host, $username, $password) or die ("can't connect");
mysql_select_db ($db_name) or die (mysql_error());
$myusername = $_POST['myusername'];
$mypassword = $_POST['mypassword'];
$sql = "SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result = mysql_query($sql);
$count = mysql_num_rows($result);
if ($count == 1){
session_register("myusername");
session_register("mypassword");
header("Location:cms/admin.php");
}else{
echo "Wrong username or password";
}发布于 2012-02-18 02:40:27
哇。这是一个大的禁忌:
$myusername = $_POST['myusername'];
$mypassword = $_POST['mypassword'];您至少需要使用mysql_real_escape_string清理这些输入。
将其更改为:
$myusername = mysql_real_escape_string($_POST['myusername']);
$mypassword = mysql_real_escape_string($_POST['mypassword']);htmlentities()和htmlspecialchars()也很有用,但我建议不要对进入数据库的数据使用它们。
发布于 2012-02-18 02:40:41
代码的问题在于您直接将登录框中的用户输入放入SQL查询中。这确实是一个安全漏洞,并允许SQL注入。
您可以使用mysql_real_escape_string()函数来解决这个问题-只需将登录表单中的变量传递给它,然后再将其放入SQL查询。
然而,我更喜欢的解决方案是使用PDO或MySQLi准备好的语句-我强烈建议您学习和使用这种方法。
发布于 2012-02-18 02:39:30
是
$myusername = $_POST['myusername'];
$mypassword = $_POST['mypassword'];应该受到保护
$myusername = mysql_real_escape_string ($_POST['myusername']);
$mypassword = mysql_real_escape_string ($_POST['mypassword']);https://stackoverflow.com/questions/9333545
复制相似问题