&引用;“安全地”;允许用户使用SQL进行搜索
例如,我经常想搜索stackoverflow&引用;“安全地”;允许用户使用SQL进行搜索,sql,security,web-applications,Sql,Security,Web Applications,例如,我经常想搜索stackoverflow SELECT whatever FROM questions WHERE views * N + votes * M > answers AND NOT(answered) ORDER BY views; 或者类似的 是否有任何合理的方法允许用户使用SQL作为搜索/过滤语言 我发现它有一些问题: 访问/更改内容(一个精心设置的用户帐户应该可以解决这一问题) SQL注入(考虑到之前的情况,他们应该能够做的最糟糕的事情是找回垃圾并在那里崩
SELECT whatever FROM questions WHERE
views * N + votes * M > answers AND NOT(answered) ORDER BY views;
或者类似的
是否有任何合理的方法允许用户使用SQL作为搜索/过滤语言
我发现它有一些问题:
- 访问/更改内容(一个精心设置的用户帐户应该可以解决这一问题)
- SQL注入(考虑到之前的情况,他们应该能够做的最糟糕的事情是找回垃圾并在那里崩溃会话)
- 带有病态查询的DOS攻击
- 你给他们什么索引
编辑:我想允许连接,还有什么不允许的。如果你做了
SQLEncode
你的用户输入(并确保删除所有;
),我看不到有三个输入框存在巨大的安全缺陷(除了我们仍在将核武器交给Psycho…),一个用于表格,一个用于列,一个用于条件。它们的条件中不能包含字符串,但是像您的示例这样的查询应该可以工作。您将实际粘贴SQL语句,因此您将控制实际执行的内容。如果你的设置足够好,你就安全了
但是,我不会让我的用户像那样输入SQL。如果您想真正自定义搜索选项,请为搜索字段提供一组标志,或者提供一组可以随意组合的表单元素
另一种选择是发明某种“标记语言”,有点像Markdown(框架用于格式化所有这些问题和答案…),您可以将其转换为SQL。然后,您可以确保只执行“无害”选择,并且可以保护用户数据等
事实上,如果您实现了这一点,您应该看看是否可以从SQL server上的单独帐户运行这些命令,该帐户只能访问最基本的需求,显然只能进行读取访问。访问/更改内容
没问题,只要用一个残废的用户运行查询,权限仅限于选择 SQL注入
只需清理查询 拒绝服务攻击
超时查询并通过IP限制访问。我想你也可以限制某些服务器的CPU使用量,Facebook就是这样做的。参见or。我刚刚想到了一种强大的消毒方法,可以用来限制可以使用的内容
- 使用MySQL并获取它的lex/yacc文件
- 按原样使用lex文件
- 将yacc文件绑定到您希望允许的内容
- 使用在成功时吐出输入的操作规则