验证用户输入(搜索过滤器)

时间:2010-10-21 14:04:39

标签: php mysql validation search query-string

我正在建立一个搜索页面,我对于在消毒和验证用户输入方面应该做些什么有点不确定。

搜索页面包含通过查询字符串传递的过滤器。 (一些来自输入,另一些来自带有复选框/无线电行为的链接)

在这种情况下我应该注意什么?我可以安全地使用preg_replace(除了全部除外)和转义吗?

此外 - 在将链接放入链接之前,我是否需要对查询字符串(使用用户输入)执行任何操作?我应该添加另一个查询来检索可能的值,循环结果并排除那些未找到的用户输入吗? (防止链接附加用户可能放入的虚假过滤器选项。虽然这不会仅仅影响具有更改的URL的用户?)

我不知道它是否重要,但在查询字符串中传递的一些过滤器是数组。

你怎么看?我对此很陌生,我很感激帮助。谢谢!

2 个答案:

答案 0 :(得分:0)

从您的问题中不清楚您要保护什么,但清理输入的常见问题是数据库。

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

没有多少逃脱比这更好。

至于对查询字符串本身进行清理,请问自己:如果攻击者手工构建了URL,是否会发生错误?或者他们会得到一个错误页面?

答案 1 :(得分: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));