【发布时间】:2011-05-13 17:17:39
【问题描述】:
有人入侵了我的数据库并删除了该表。
在我的 PHP 页面中,我使用 mysql_real_escape_string 有一个查询:
$db_host="sql2.netsons.com";
$db_name="xxx";
$username="xxx";
$password="xxx";
$db_con=mysql_connect($db_host,$username,$password);
$connection_string=mysql_select_db($db_name);
mysql_connect($db_host,$username,$password);
mysql_set_charset('utf8',$db_con);
$email= mysql_real_escape_string($_POST['email']);
$name= mysql_real_escape_string($_POST['name']);
$sex= mysql_real_escape_string($_POST['sex']);
if($_POST['M']!=""){ $sim = 1; }else { $sim = 0; }
$query = "INSERT INTO `users` (`email`, `name`, `sex`, `M`) VALUES
( '".$email."', '".ucwords(strtolower($name))."', '".$sex."','".$sim."')";
$res = mysql_query($query) or die("Query fail: " . mysql_error() );
mysql_close($db_con);
而register_globals 被禁用。
那么,我的数据库是如何被黑的?
【问题讨论】:
-
您的连接使用什么字符集?
-
看看 PDO 及其准备好的语句。它会为您节省大量时间和麻烦。
-
你为什么使用
mysql_select_db()两次? -
为什么,在这个时代,还有人使用脑死亡的 SQL 动态生成字符串? (实际有效的用例非常遥远。)
标签: php mysql sql-injection