在不允许滥用的情况下向公众开放SQL读取访问权限

时间:2014-05-29 01:37:15

标签: mysql sql

我正在考虑允许公众在公共数据集上进行只读SQL查询。以前,我在Stack Exchange Chat PHP页面上提到了这一点,并立即遇到了大量no...no...nooooooooooo!!!!!!式的响应。

人们似乎认为这太危险了。有人把它比作将安全锁放在枪上,并希望没有人开枪。没有人真正了解更多细节,但有人提到系统调用。 我的问题是我通过这样做可以冒什么风险以及可以采取哪些措施来抵消这种风险(比如停止无限循环的超时)?

这个SO question问题涵盖了一些主题,但是关于部分用户可控制的查询,而不是完全控制。它也没有回答我的问题。

编辑:澄清一下,我可以采取哪些具体步骤来阻止资源占用(无限循环等)。目前没有任何东西可以控制查询。查询通过PHP页面运行。

2 个答案:

答案 0 :(得分:2)

我说去吧。

对于所有说过no...no...nooooooooooo!!!!!!的人,请考虑一下:

StackOverflow(通过Meta Stack Exchange)为任何人提供免费访问其帖子的权限。此访问是通过开放的sql格式完成的。别相信我?亲自尝试:http://data.stackexchange.com/stackoverflow/query/new

想要我写的一个查询示例吗?这里:Tag usage over time

为了减少暴露数据的危险,请考虑以下事项:

  • 不要通过sql客户端公开与数据库的直接连接。考虑使用接受SQL查询并返回结果的网页。

  • 解析sql命令以查找任何可疑命令。很难,我知道,但是你可以阻止使用sql函数。

  • 请记住,这必须在计算机上运行,​​因此请考虑安全性并将此计算机与核心隔离。

  • 考虑终止花费太长时间才能完成的查询。

  • 不言而喻:不要在那里保留任何可识别/用户信息。

  • 请考虑定期刷新架构。

答案 1 :(得分:1)

如果你小心地锁定MySQL服务器的保护,并且只发布允许读取各种表的用户名,你应该能够允许一些基本访问并防止对服务器的天真攻击(如{{1等等)。

这是令人担忧的更复杂的攻击。<​​/ p>

编写长期运行的数据爆炸式查询并不难,这些查询与拒绝服务攻击无法区分。无约束的自连接就是一个简单的例子。如果您的MySQL端口正在侦听公共IP地址,笨拙或恶意的用户填满您的连接表或游标表并使您的服务器无法访问,也不难。

所以,我建议你去做吧。但将您公开可见的服务器视为牺牲品。将其设置为主服务器的某种克隆(但没有实时链接返回其主服务器)。把它放在公共网上,期望intertoobz狼会攻击并屠杀它。当他们这样做时,只需恢复并继续。这是http://sqlfiddle.com/的工作方式,效果非常好。

另一个选择可能是将MySQL服务器隐藏在安全设计的Web服务之后,该服务序列化并控制对它的访问。