0

我有一个记录编辑链接,它获取一个 7 个字符的字母数字文本字符串,该字符串的结构始终为 ZZZZ111,然后在 MySQL 查询中用于提取该记录 ID 的所有相关数据。

mysql_real_escape_string()我只需要对它进行消毒吗$_GET['id']?还是有更多的步骤来保护我的数据库?

4

5 回答 5

6

mysql_real_escape_string()将逃避任何恶意字符。此外,您可以使用正则表达式/^[A-Za-z]{4}\d{3}$/来确保用户确实输入了有效的输入。

于 2009-12-07T06:49:53.723 回答
2

为了使 SQL 查询的输入安全,mysql_real_escape_string()应该就足够了,尽管我建议切换到 PDO 和prepared statements。它们往往更好用,效率更高(语句只解析一次,查询可以重复使用)。

但是,您还应该确保您的页面不受跨站点脚本的影响,方法是(例如)根据白名单从字段中过滤 HTML。

于 2009-12-07T06:44:09.693 回答
2

如果您打算向用户显示您的数据,您还希望删除任何 HTML 标记。例如,也许有人在留言簿帖子中插入了恶意 javascript?

这可以通过http://php.net/manual/en/function.htmlentities.php来完成

或者您可以使用 inputfilter 类来允许某些标签等。我发现这个非常有用http://www.phpclasses.org/browse/package/2189.html

于 2009-12-07T08:01:09.197 回答
1

mysql_real_escape_string() 是一个好的开始,我同意使用准备好的语句将是一个不错的选择。如果您想研究一些可以使 PDO 更易于使用的 DB 抽象,Zend_Db非常好。

我也会借此机会为您的输入编写某种 RegEx 验证器。可以帮助您入门的示例正则表达式是:

[A-Z]{4}[0-9]{3}

更多关于 PHP 和正则表达式的信息可以在这里找到:http ://www.regular-expressions.info/php.html

于 2009-12-07T06:51:21.230 回答
0

mysql_real_escape_string应该为$_GET['id']. 另外,通过PDO查看准备好的语句。

于 2009-12-07T06:49:55.517 回答