我有一个记录编辑链接,获取7个字符的字母数字文本字符串,该字符串在结构中始终为ZZZZ111,然后在MySQL查询中用于为该记录标识提取所有相关数据。
是mysql_real_escape_string()
所有我需要在这方面的消毒$_GET['id']
?还是有更多的步骤来保护我的数据库?
我有一个记录编辑链接,获取7个字符的字母数字文本字符串,该字符串在结构中始终为ZZZZ111,然后在MySQL查询中用于为该记录标识提取所有相关数据。
是mysql_real_escape_string()
所有我需要在这方面的消毒$_GET['id']
?还是有更多的步骤来保护我的数据库?
mysql_real_escape_string()
会转义任何恶意字符。另外,您可以使用像/^[A-Za-z]{4}\d{3}$/
这样的正则表达式来确保用户确实输入了有效的输入。
为了使SQL查询的输入安全,mysql_real_escape_string()
应该足够了,但我建议切换到PDO和prepared statements。他们倾向于使用更好,效率更高一些(语句只解析一次,查询可以重新使用)。
但是,您还应该通过(例如)从基于白名单的字段过滤HTML来确保您的页面不受cross-site scripting的影响。
mysql_real_escape_string
应该为$_GET['id']
做这项工作。另外,请通过PDO查看准备好的声明。
mysql_real_escape_string()是一个好的开始,我同意使用预准备语句将是一个不错的选择。 Zend_Db很好,如果你想了解一些可以使PDO更容易处理的数据库抽象。
我也想以此为契机,为您的输入编写某种RegEx验证程序。这可以让你开始一个样本正则表达式是:PHP和正则表达式
[A-Z]{4}[0-9]{3}
更多信息可以在这里找到:http://www.regular-expressions.info/php.html
如果您计划在显示你的数据给用户,你想删除任何HTML标记以及。也许有人插入一个恶意的JavaScript在留言板后例如?
这可以用http://php.net/manual/en/function.htmlentities.php
完成,或者你可以使用输入过滤器类,允许某些标记等 我发现这是非常有用的http://www.phpclasses.org/browse/package/2189.html
确保消毒输入的最佳方法是使用PDO和准备好的陈述应用到你的代码中非常简单,并且会给你更多的安全性。 – Tordek 2009-12-07 06:38:45