我有一个记录编辑链接,它获取一个7字符的字母数字文本字符串,结构中始终为ZZZZ111,然后在MySQL查询中用于提取该记录ID的所有相关数据。
我需要mysql_real_escape_string()
来清理这个$_GET['id']
吗?或者还有更多步骤来保护我的数据库?
答案 0 :(得分:6)
mysql_real_escape_string()
将逃避任何恶意字符。此外,您可以使用/^[A-Za-z]{4}\d{3}$/
之类的正则表达式来确保用户确实输入了有效的输入。
答案 1 :(得分:2)
为了使SQL查询的输入安全,mysql_real_escape_string()
应该足够,但我建议切换到PDO和prepared statements。它们往往使用起来更好一点,效率更高一些(语句只解析一次,查询可以重复使用)。
但是,您还应该通过(例如)根据白名单过滤HTML来确保您的网页免受cross-site scripting的影响。
答案 2 :(得分:2)
如果您打算向用户显示数据,您还要删除任何HTML标记。也许有人在留言板帖子中插入了恶意javascript?
可以使用http://php.net/manual/en/function.htmlentities.php
完成此操作或者你可以使用inputfilter类来允许某些标签等。 我发现这个非常有用http://www.phpclasses.org/browse/package/2189.html
答案 3 :(得分:1)
mysql_real_escape_string()是一个好的开始,我同意使用预准备语句将是一个不错的选择。如果你想研究一些可以让PDO更容易使用的数据库抽象,那么Zend_Db是很好的。
我还以此为契机,为您的输入编写某种RegEx验证器。可以帮助您入门的示例正则表达式是:
[A-Z]{4}[0-9]{3}
有关PHP和正则表达式的更多信息,请访问:http://www.regular-expressions.info/php.html
答案 4 :(得分:0)
mysql_real_escape_string
应该为$_GET['id']
完成工作。另外,请通过PDO查看准备好的陈述。