【问题标题】:php + mysql: is it safe to use serialize() without addslashes()?php + mysql:在没有addlashes()的情况下使用serialize()是否安全?
【发布时间】:2012-05-08 10:32:40
【问题描述】:

将使用serialize() 序列化的数组插入db 是否完全安全,或者我应该先做addslashes(serialize($array))?或者可以有一些mysql特定的字符?我可以使用插入删除数据或其他内容吗?

【问题讨论】:

    标签: php mysql serialization


    【解决方案1】:

    不,它根本不安全

    你不应该使用addslashes,而是使用mysql_real_escape_string。或者更好的是,将 PDO 与准备好的语句一起使用,而不是转义。

    【讨论】:

    • 请勿使用addslashes()! 使用mysql_real_escape_string() 转义 MySQL 数据库的数据。总是。
    • ..除非你使用数据绑定,或者将数据写入不是 mysql 的东西。 Addslashes 总是错误的答案,mysql_real_escape_string() 并不总是正确的。
    • 这个问题被标记为mysql,所以在这种情况下它是正确的答案。
    • 您不必这样做。您可以转义在查询中具有特殊含义的字符。所以实际存储的数据不包含转义字符。
    【解决方案2】:

    完全 ***不安全*将序列化的数据插入数据库而不进行特定于数据库的处理。

    您应该使用推荐的任何机制来防止您选择的数据库访问层的 SQL 注入;使查询安全免受注入还包括正确转义数据,因此您将用一块石头击中两只鸟。

    具体示例请参见How can I prevent SQL injection in PHP?

    【讨论】:

    • @Eugeny89:不要那样做! addslashes 不是一个好的解决方案,因为它只会在大多数的时间里起作用。请花时间阅读我链接到的问题。
    • 请注意,我正在序列化一个数组。在mysql_real_escape_string 之后如何取消转义?
    • @Eugeny89:你不需要。
    猜你喜欢
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    • 2020-06-16
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多