【问题标题】:Basic MySQL/PHP Filtering基本 MySQL/PHP 过滤
【发布时间】:2010-01-05 23:22:46
【问题描述】:

我知道这是一个非常基本的问题,所以我只想要一个简单的答案,有几种方法可以让我的用户输入对 mysql 安全。

这是最好的方法

mysql_real_escape_string()

所有用户提交的项目都进入 mysql 查询?

如果我使用上述方法,当我从 mysql 取回它以显示在 PHP 页面上时,是否需要在该日期使用另一个函数?

【问题讨论】:

    标签: php mysql filter


    【解决方案1】:

    PHP有很好的过滤功能

    http://php.net/manual/de/ref.filter.php

    /*** use a callback filter to mysql_real_escape_string ***/
    $answer = filter_input(INPUT_POST, "answer", FILTER_CALLBACK, array("options"=>"mysql_real_escape_string"));
    
    /*** create an sql query ***/
    $sql = "INSERT INTO quiz (answers) VALUES ('{$answer}')";
    
    /*** echo the query ***/
    echo $sql;
    

    【讨论】:

      【解决方案2】:

      使用准备好的语句是将数据放入 MySQL 的最佳方式。 Prepared statements 明确地告诉 MySQL 什么是 SQL,什么是数据,因此 MySQL 不会在数据中执行任何 SQL。

      您可以通过Mysqli 开始使用准备好的语句。

      至于在你的 PHP 页面中显示数据,你可以使用htmlspecialchars() 来转义你的输出。

      【讨论】:

      • 准备好的陈述是要走的路。代码干净、智能、无错误。
      【解决方案3】:

      转义输入,过滤输出。

      • 您应该使用mysql_real_escape_string() 或prepared statements 进入数据库。
      • 您应该对最终用户在页面上显示时生成的任何数据使用htmlentities()。

      请注意,根据用户的浏览器和他们使用的特定攻击媒介,htmlentities 不会处理所有可能的跨站点脚本攻击。许多人使用像 HTML Purifier 这样的清理库来清理他们的数据,然后再将其显示在页面上。

      【讨论】:

      • 我只是在看 htmlentities(),它是说:'quote' is bold ====变成=== A'quote' is &lt ;b>粗体</b>如果我运行它并查看页面的源代码,它会显示为 html 或像这样?
      • @jasondavis,它会将有效的 HTML 标签转换为它们的实体(文本)等价物。如果您的输出变量包含 HTML,您应该考虑使用 HTML Purifier。
      猜你喜欢
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-18
      • 1970-01-01
      • 2011-10-05
      • 2023-03-22
      相关资源
      最近更新 更多