我的MySQL数据库被擦除了,我认为这是一个SQL注入,我错在哪里?

时间:2013-12-24 15:54:26

标签: php mysql

所以我有一个现场测试数据库,我离开了假期然后回来,我的MYSQL数据库被擦除数据(只有大约8行)。这是所有测试数据所以我并不担心,我的想法是我通过我的PHP注册表单注入了SQL,但我没有看到任何漏洞。

我正在为我的SQL查询使用变量,这是我认为可以阻止此类攻击的。

我对漏洞的位置感到茫然。我只有5个文件,这是我认为是问题的文件,它是从以前的表单接收数据。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Challenge Me</title>
</head>
<body bgcolor="black" style="color:white;">

<?php

if($_GET["dispname"] && $_GET["regemail"] && $_GET["regpass"] && $_GET["regpass2"] )
{
if($_GET["regpass"]==$_GET["regpass2"])
{
$regemail = $_GET["regemail"] ;
$servername="localhost";
$username="***";
$password="***";
$database="***";
$conn= mysql_connect($servername,$username,$password)or die(mysql_error());
mysql_select_db("$database",$conn);


$query = 'SELECT email FROM users WHERE email = "' . $regemail . '"';
$result = mysql_query($query) or die(mysql_error());

if (mysql_num_rows($result) ) {
        die("Duplicate email found!  Please press the back button to use another email or " . "<a href='forgotpassword.php'>CLICK HERE</a> to have your password emailed");
    }
    else {}


$sql="insert into users (fullname, displayname,email,password)values('$_GET[fullname]','$_GET[dispname]','$_GET[regemail]','$_GET[regpass]')";
$result=mysql_query($sql,$conn) or $string = mysql_error();







$to = $_GET['regemail'];
$subject = "Thank you for Registering!";
$message = "Hello " . $_GET['dispname'];
$from = "noreply@challengeme.com";
$headers = "From:" . $from;
mail($to,$subject,$message,$headers) or die('You have successfully registered however mail servers are currently down, you may or may not receive an email');



print "<h1>You have registered successfully</h1>";

print "You will receive an email shortly with your confirmation.  You may now log in</a>";
}
else print "passwords do not match";
}
else print"Please fill out all required fields";
?>

 </body>
 </html>

1 个答案:

答案 0 :(得分:3)

  

我正在使用变量进行SQL查询,这就是我的想法   防止了这种类型的攻击。<​​/ p>

嗯,这就是你错了。你要找的是parameters。 ($ _GET已经是一个变量,将它分配给另一个变量对安全性一无所知)

如果你想坚持使用mysql,你需要对你的变量使用mysql_real_escape_string

您最好的选择是使用PDOMySQLi重写,以便您可以使用参数化查询,从而为您自动执行转义和注入预防。

相关问题