代码之家  ›  专栏  ›  技术社区  ›  helloandre

这是至少稍微安全的PHP代码吗?

  •  1
  • helloandre  · 技术社区  · 15 年前

    我有一堆$u post变量通过长格式发送,而不是用 mysql_escape_string() 我可以做以下工作吗?我不知道这是否是真正安全和/或可行的代码。

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

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

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

    编辑:我使用PDO和Prepare()以及上面的方法。这能帮我解决吗?

    3 回复  |  直到 15 年前
        1
  •  10
  •   Tomalak    15 年前

    为什么不使用 array_map() ?

    array_map(mysql_real_escape_string, $_POST);
    

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

    mysql_real_escape_string() 考虑到当前数据库字符集, mysql_escape_string() 没有。相比之下,前者是更好的选择。

    编辑(跟进操作员对问题的编辑):

    因为您已经准备好了PDO语句,所以不需要修改您的值。PDO负责一切,这就是关键所在( 如果您真的将所有数据放入参数中,那就是 -仅仅连接字符串来构建SQL语句就会导致PDO或不PDO的灾难)。预先转义值将导致数据库中转义的值。

        2
  •  3
  •   Chad Birch    15 年前

    是的,你应该用 mysql_real_escape_string() 如果你要走那条路。但是确保变量安全发送到数据库的正确方法是使用 Parameterized Queries 在php中通过 mysqli 功能或 PDO .

        3
  •  1
  •   1800 INFORMATION    15 年前

    除了前面的注释外,使用参数化查询的另一个好处是数据库能够进行更好的优化,并且可能使用缓存的查询计划,以便获得更好的性能。