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

转义用户数据,不带引号

  •  3
  • danp  · 技术社区  · 16 年前

    我正在研究如何在数据用于应用程序控制、存储和逻辑之前正确地转义来自外部世界的数据。。那种事。

    显然,随着magic quotes指令在PHP5.3.0+中很快被弃用,并在php6中被删除,这对于任何希望升级并进入新语言功能的人来说变得更加紧迫,同时维护遗留代码(难道我们不喜欢它吗…)。

    PHP Manual - mysql_real_escape_string

    PHP Manual - htmlspecialchars

    等等。

    有什么建议吗?

    5 回复  |  直到 16 年前
        1
  •  6
  •   Saif Bechan    16 年前

    看看准备好的陈述。我知道在mysql中,这非常有效,是一种将数据导入数据库的安全形式。它也有一些性能优势。

    http://dev.mysql.com/tech-resources/articles/4.1/prepared-statements.html

    如果你感兴趣的话,我有更多的资源。

    希望这就是你想要的,tc。

    编辑:

    这样可以节省一些代码,而且效果非常好。之后,您可以始终使用自己的方法检查数据,但是您可以使用很多过滤器。

        2
  •  2
  •   Galen    16 年前
    • 运行查询时使用正确的转义数据方法:

    • 将数据存储在数据库中,不作更改

    • htmlspecialchars等。。

        3
  •  2
  •   Arkh    16 年前

    PDO 和 mysqli

    Htmlspecialchars 是在html文档中显示某些文本的正确工具。

    而且,正如您提到的PHP5.3,您可以访问 filter functions 这是处理用户数据时必须使用的。

        4
  •  1
  •   Daniel Martin    16 年前

    bind variables .

    通常,当您发现自己正在转义任何内容(shell命令的参数、db命令片段、用户提供的html等)时,都表明您没有使用正确的函数调用(例如,使用 system exec

    思考逃避的层次和引用的层次可能很有趣,但如果你真的喜欢,那就在业余时间与Tcl一起玩吧。对于实际工作,除非你正在设计一个供其他人使用的库,否则你不应该考虑引用,在这种情况下,你应该正确引用,让你的用户避免考虑引用。(你应该非常仔细地记录你做什么样的引用和不做什么样的引用)

        5
  •  0
  •   William    16 年前

    很简单。所有传入的数据都应通过 mysql_real_escape_string() 在将其插入数据库之前。例如,如果您知道某些内容需要是整数,请在插入之前将其设置为整数,等等。请记住,这只是为了停止SQL注入。XSS和数据验证是不同的。

    如果您希望某个内容是电子邮件,则显然需要在将其插入数据库之前对其进行验证。

    htmlentities() 清理数据,意味着 修改

    我喜欢使用以下函数作为 mysql\u real\u escape\u string() 功能。

    function someFunction( $value )
    {
        if ( is_int( $value ) || is_float( $value ) ) {
            return $value;
        }
        return "'" . mysql_real_escape_string( (string) $value ) . "'";
    }
    

    如果该值是浮点或整数,则运行时没有意义 . 在将值传递给之前将其强制转换为字符串的原因 mysql\u real\u escape\u string() ,是因为有时值可能不是字符串。

    值不是字符串的示例:

    http://localhost/test.php?hello[]=test

    mysql\u real\u escape\u string()

    推荐文章