例如,我经常想用
搜索stackoverflowSELECT whatever FROM questions WHERE
views * N + votes * M > answers AND NOT(answered) ORDER BY views;
或类似的东西。
有没有合理的方法允许用户使用SQL作为搜索/过滤语言?
我发现它有一些问题:
编辑:我想允许加入,还有什么不合适。
答案 0 :(得分:5)
访问/更改内容
没问题,只需使用残缺用户运行查询,只有权限选择
SQL注入
只需清理查询
DOS攻击
超时查询并通过IP限制访问。我想你也可以限制某些服务器的CPU使用率
答案 1 :(得分:2)
如果您SQLEncode
用户输入{并确保同时删除所有;
!),我认为没有任何巨大的安全漏洞(除此之外,我们仍然将核武器交给psychos ...)有三个输入框 - 一个用于表,一个用于列,一个用于条件。他们将无法在他们的条件中使用字符串,但像您的示例之类的查询应该有效。您将对SQL语句进行实际粘贴,这样您就可以控制实际执行的内容。如果您的设置足够好,那么您将是安全的。
但是,我不会让我的生命让我的用户像那样输入SQL。如果你想真正自定义搜索选项,可以为搜索字段提供一堆标志,或者可以随意组合一堆表单元素。
另一种选择是发明某种“标记语言”,有点像Markdown(用于格式化所有这些问题和答案的框架......),你可以将其翻译成SQL。然后,您可以确保只执行“无害”选择,并且可以保护用户数据等。
事实上,如果您实现了这一点,您应该看看是否可以从SQL服务器上的单独帐户运行命令,该帐户只能访问非常基本的需求,显然只能读取访问权限。
答案 2 :(得分:1)
Facebook使用FQL执行此操作。请参阅blog post或presentation。
答案 3 :(得分:0)
我只是想到了一种强大的消毒方法,可以用来限制可以使用的方法。