Mysql真的逃脱了

时间:2014-12-16 08:31:57

标签: php mysql sql-injection

所以我使用mysql_real_escape_string函数在以下代码中停止sql注入攻击,但它似乎没有工作,我将如何解决这个问题?

<?php
$address = mysql_real_escape_string($_POST['bitcoinaddress']);

$btc = mysql_real_escape_string($_POST['btcamount']);

$phone = mysql_real_escape_string($_POST['phonenumber']);

$con = mysql_connect("localhost","db user","password");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("db_name", $con);
$sql="INSERT INTO `db_name`.`form` (`bitcoinaddress`, `btcamount`, `phonenumber`) VALUES
('$_POST[bitcoinaddress]','$_POST[btcamount]','$_POST[phonenumber]')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
  echo ($_POST['btcamount']);
  mysql_close($con);
?>

2 个答案:

答案 0 :(得分:1)

问题是你没有使用它......

进行此更改。

<?php
$address = mysql_real_escape_string($_POST['bitcoinaddress']);

$btc = mysql_real_escape_string($_POST['btcamount']);

$phone = mysql_real_escape_string($_POST['phonenumber']);

$con = mysql_connect("localhost","db user","password");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("db_name", $con);
$sql="INSERT INTO `db_name`.`form` (`bitcoinaddress`, `btcamount`, `phonenumber`) VALUES
('".$address."','".$btc."','".$phone."')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
  echo ($btc);
  mysql_close($con);
?>

答案 1 :(得分:0)

您正在使用转义值创建变量,然后继续使用原始变量。

但是这样使用mysql_real_escape_string()并不是一个好主意,因为它不会在没有额外工作的情况下正确地清理数据,例如检查数字输入实际上是数字。请改用mysqlipdo和预备语句。