2009-12-07 53 views
0

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

mysql_real_escape_string()所有我需要在这方面的消毒$_GET['id']?还是有更多的步骤来保护我的数据库?

+2

确保消毒输入的最佳方法是使用PDO和准备好的陈述应用到你的代码中非常简单,并且会给你更多的安全性。 – Tordek 2009-12-07 06:38:45

回答

6

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

2

为了使SQL查询的输入安全,mysql_real_escape_string()应该足够了,但我建议切换到PDO和prepared statements。他们倾向于使用更好,效率更高一些(语句只解析一次,查询可以重新使用)。

但是,您还应该通过(例如)从基于白名单的字段过滤HTML来确保您的页面不受cross-site scripting的影响。

0

mysql_real_escape_string应该为$_GET['id']做这项工作。另外,请通过PDO查看准备好的声明。

1

mysql_real_escape_string()是一个好的开始,我同意使用预准备语句将是一个不错的选择。 Zend_Db很好,如果你想了解一些可以使PDO更容易处理的数据库抽象。

我也想以此为契机,为您的输入编写某种RegEx验证程序。这可以让你开始一个样本正则表达式是:PHP和正则表达式

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

更多信息可以在这里找到:http://www.regular-expressions.info/php.html