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

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

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

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

编辑:我正在使用 PDO 和prepare() 以及上述方法。这能帮我解决吗?

有帮助吗?

解决方案

为什么不使用 array_map()?

array_map(mysql_real_escape_string, $_POST);

但实际上您应该使用参数化/准备好的语句。

mysql_real_escape_string() 考虑当前数据库字符集, mysql_escape_string() 才不是。所以相比之下,前者是更好的选择。

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

由于您已经执行了 PDO 准备语句,因此无需修改您的值。PDO 负责一切,这就是它的重点(如果真的把所有数据都放在参数里的话,那就是 - 无论是否使用 PDO,仅连接字符串来构建 SQL 语句都会导致灾难。预先转义这些值会导致数据库中出现转义值。

其他提示

是的,你应该使用 mysql_real_escape_string(), ,如果你打算走那条路。但确保变量可以安全发送到数据库的正确方法是使用 参数化查询 PHP 中通过以下任一方式提供 mysqli 函数或 磷酸二氢钾.

除了先前的评论,另一个好处是用参数化查询是数据库将能够做的更好的优化,可能使用缓存的查询计划,这样你会得到更好的性能。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top