这是至少温和安全的PHP代码?

时间:2009-04-17 05:32:22

标签: php mysql security post mysql-real-escape-string

我有一个$ _POST变量的BUNCH通过一个长形式发送,而不是使用mysql_escape_string()对每个变量进行硬编码我可以执行以下操作吗?我不知道这是否真的是安全和/或可行的代码。

foreach ($_POST as &$post_item){
    $post_item = mysql_escape_string($post_item);
}

我很确定因为我正在使用&,它通过引用传递它,而不是值,所以我实际上是在更改$ _POST中的值。

另外,我应该使用mysql_real_escape_string()吗?

编辑:我正在使用PDO和prepare()以及上述方法。这会照顾我吗?

3 个答案:

答案 0 :(得分:10)

为什么不使用array_map()

array_map(mysql_real_escape_string, $_POST);

但实际上你应该使用参数化/预备语句。

mysql_real_escape_string()考虑当前数据库字符集,mysql_escape_string()没有。所以前者是比较好的替代品。

编辑(跟进OP对问题的编辑):

由于您已经完成了PDO预处理语句,因此无需修改您的值。 PDO负责所有事情,这就是它的全部要点(如果你真的将所有数据都放在参数中,那就是 - 只是连接字符串来构建SQL语句会导致PDO或没有PDO的灾难)。事先转义值会导致数据库中的转义值。

答案 1 :(得分:3)

是的,你应该使用mysql_real_escape_string(),如果你要去那条路。但是确保变量可以安全发送到数据库的正确方法是使用Parameterized Queries,它通过mysqli函数或PDO在PHP中提供。

答案 2 :(得分:1)

除了之前的评论之外,使用参数化查询的另一个好处是数据库将能够进行更好的优化,并且可能使用缓存的查询计划,这样您将获得更好的性能。