Поэтому использую 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);
?>
Проблема в том, что вы не используете его …
Сделай это изменение.
<?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);
?>
Вы создаете переменные с экранированными значениями, но затем продолжаете использовать исходные переменные.
Но это не очень хорошая идея, чтобы использовать mysql_real_escape_string()
в любом случае это так, поскольку он не всегда правильно очищает данные без дополнительной работы, такой как проверка того, что числовой ввод действительно является числовым. использование mysqli
или же pdo
и подготовил заявления вместо.