简单的PHP $ _GET清理问题

时间:2009-12-07 06:32:49

标签: php sanitization

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

我需要mysql_real_escape_string()来清理这个$_GET['id']吗?或者还有更多步骤来保护我的数据库?

5 个答案:

答案 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查看准备好的陈述。

相关问题