【发布时间】:2015-09-15 14:09:32
【问题描述】:
首先,我知道这是不好的做法,但无论如何我仍在寻找答案。
在我们的 Web 应用程序中,我们有一个文本区域,用户可以在其中编写 SQL 以引入自定义数据集并在图表中查看它们。它的工作方式本质上是获取写入的字符串并将其作为查询执行。我正在寻找的是我需要在我们的应用服务器后端安全方面实现的一切,以禁止执行产生除SELECT 类型查询以外的结果的查询。
用户将无法执行他想要的任何类型的 SELECT 查询,因为应用服务器后端将返回的结果集扩展为具有名为 X_FIELD 和 Y_FIELD 的 2 列,所以我们不是那么多担心用户查看数据的次数与执行会破坏数据库的 SQL 一样多。
我们的想法是解析字符串中的关键字,例如DROP、ALTER、CREATE 等。有什么需要特别注意的吗?是否有自动化的工具/库?我们使用 java 作为后端代码。
【问题讨论】:
-
如何创建对数据库的访问权限非常有限的用户?
-
你知道它运行的是 SQL Server 还是 Oracle?
-
@jarlh 正如它在标签中所说,应用程序可以在两台服务器上运行(甚至更多,但标签不适合)所以这必须涵盖它们。
-
感谢您的澄清! (通常不涉及的产品被标记...)
-
我们在现成的应用程序中有类似的功能。一位用户从 a_very_large_table 中选择 * 并为其他所有人冻结了数据库,而这需要数小时才能完成。当我们终止会话时,它会使应用服务器崩溃。我们不再允许这样做......
标签: java sql sql-server oracle sql-injection