【发布时间】:2010-01-05 23:22:46
【问题描述】:
我知道这是一个非常基本的问题,所以我只想要一个简单的答案,有几种方法可以让我的用户输入对 mysql 安全。
这是最好的方法
mysql_real_escape_string()
所有用户提交的项目都进入 mysql 查询?
如果我使用上述方法,当我从 mysql 取回它以显示在 PHP 页面上时,是否需要在该日期使用另一个函数?
【问题讨论】:
我知道这是一个非常基本的问题,所以我只想要一个简单的答案,有几种方法可以让我的用户输入对 mysql 安全。
这是最好的方法
mysql_real_escape_string()
所有用户提交的项目都进入 mysql 查询?
如果我使用上述方法,当我从 mysql 取回它以显示在 PHP 页面上时,是否需要在该日期使用另一个函数?
【问题讨论】:
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;
【讨论】:
使用准备好的语句是将数据放入 MySQL 的最佳方式。 Prepared statements 明确地告诉 MySQL 什么是 SQL,什么是数据,因此 MySQL 不会在数据中执行任何 SQL。
您可以通过Mysqli 开始使用准备好的语句。
至于在你的 PHP 页面中显示数据,你可以使用htmlspecialchars() 来转义你的输出。
【讨论】:
mysql_real_escape_string() 或prepared statements 进入数据库。htmlentities()。请注意,根据用户的浏览器和他们使用的特定攻击媒介,htmlentities 不会处理所有可能的跨站点脚本攻击。许多人使用像 HTML Purifier 这样的清理库来清理他们的数据,然后再将其显示在页面上。
【讨论】: