这是一种将表单数据插入MySQL数据库的安全方法吗?

可能重复:
在PHP中停止SQL注入的最佳方法

这是w3schools.org上的示例:

HTML表单:

<html>
<body>

<form action="insert.php" method="post">
Firstname: <input type="text" name="firstname" />
Lastname: <input type="text" name="lastname" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>

</body>
</html>

insert.php:

<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("my_db", $con);

$sql="INSERT INTO Persons (FirstName, LastName, Age)
VALUES
('$_POST[firstname]','$_POST[lastname]','$_POST[age]')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "1 record added";

mysql_close($con)
?>

我已阅读了其中的其他线索,但找不到直接答案,因为大多数情况都比较复杂。

编辑:我看着最好的方式来停止在PHP中的SQL注入,但我有点困惑如何修改此:

$preparedStatement = $db->prepare('INSERT INTO table (column) VALUES (:column)');

$preparedStatement->execute(array(':column' => $unsafeValue));

假设我使用了上面的html表单,并且想要将字段'firstname'中的数据插入到数据库中,它应该是这样吗? 或者我应该修改column ?:

$preparedStatement = $db->prepare('INSERT INTO table (column) VALUES (:column)');

$preparedStatement->execute(array(':column' => $firstname));

您提供的示例将post vars插入到数据库中,而无需先分析它们以查找恶意用户输入。 使用类型转换,转义/过滤函数,准备好的语句等,然后使用它们与您的数据库进行交互。

一个通用的规则是永远不会相信用户的输入。 EVER!

退房:在PHP中停止SQL注入的最佳方法

更新:针对你的问题,这里是你如何使用PDO预处理语句处理整个表单。

$stmt = $db->prepare('INSERT INTO Persons (FirstName, LastName, Age) VALUES (:first_name, :last_name, :age)');

$stmt->execute(array(':first_name' => $first_name,':last_name' => $last_name, ':age' => $age));

如果你只是想像你问的那样在记录中插入一列,则语法是:

$stmt = $db->prepare('INSERT INTO Persons (FirstName) VALUES (:first_name)');

$stmt->execute(':first_name', $first_name);

没有。

这是非常容易受到SQL注入攻击。

而不是使用mysql_real_escape_string ,我建议使用mysql_real_escape_string准备语句。


使用mysql_real_escape_string。

链接地址: http://www.djcxy.com/p/16727.html

上一篇: Is this a secure method to insert form data into a MySQL database?

下一篇: PHP MySQLI Prevent SQL Injection