我正在建立一个搜索页面,我对于在消毒和验证用户输入方面应该做些什么有点不确定。
搜索页面包含通过查询字符串传递的过滤器。 (一些来自输入,另一些来自带有复选框/无线电行为的链接)
在这种情况下我应该注意什么?我可以安全地使用preg_replace(除了全部除外)和转义吗?
此外 - 在将链接放入链接之前,我是否需要对查询字符串(使用用户输入)执行任何操作?我应该添加另一个查询来检索可能的值,循环结果并排除那些未找到的用户输入吗? (防止链接附加用户可能放入的虚假过滤器选项。虽然这不会仅仅影响具有更改的URL的用户?)
我不知道它是否重要,但在查询字符串中传递的一些过滤器是数组。
你怎么看?我对此很陌生,我很感激帮助。谢谢!答案 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));