2010-10-21 63 views
0

我正在构建一个搜索页面,并且我有些不确定我应该如何清理和验证用户输入。验证用户输入(搜索过滤器)

搜索页面具有通过querystrings传递的过滤器。 (一些从输入和其他链接复选框/收音机行为通过)

在这种情况下我应该注意什么?我可以安全使用preg_replace(全部除外)并逃脱吗?

另外 - 我需要做任何事情(用户输入)在把它们放入链接之前?我应该添加另一个查询来检索可能的值,循环遍历结果并排除那些未找到的用户输入? (防止链接附加用户可能已经放入的虚假过滤器选项。虽然不会影响与更改的url的用户?)

我不知道它是否重要,但一些过滤器传递querystrings是数组。

您认为如何?我对此很陌生,我很感激帮助。谢谢!

回答

0

从你的问题中不清楚你试图保护什么,但是消毒输入的常见问题是数据库。

在这种情况下,最重要的是:使用参数化查询。这可以立即解决大部分问题。这里的a good answer.

逃避的数量比这更好。至于消毒查询字符串本身,问问自己:如果攻击者手动构建URL,可能会发生什么坏事?或者他们只是得到一个错误页面?

0

PHP自带的函数专门用于清理MySQL查询中使用的字符串。

如果您使用(老式)PHP函数mysql_query()向数据库发出查询,请查看PHP函数mysql_real_escape_string

$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'", 
     mysql_real_escape_string($user), 
     mysql_real_escape_string($password));