"消毒"使用内部SELECT查询的任意SQL?

时间:2016-07-05 10:39:37

标签: sql sqlite

我有一个系统,我希望人们可以在具有多个表格的多个数据库上进行任意选择查询。

我可以"消毒"通过简单地将它们嵌入子查询中来查询,即SELECT * FROM ( $USER_SELECT_QUERY )

这将允许用户进行任何类型的SELECT查询,但会在任何INSERTUPDATEDELETEEXEC等查询中产生语法错误。您是否可以提出任何类型的查询来修改/插入/删除数据,或显示有关主机系统的其他无意的详细信息,例如目录列表或其他任何内容?

假设:

  • 用户可以访问所有附加数据库中的所有数据。
  • 适当配置/监控查询时间和资源使用情况,以缓解(D)DOS攻击。
  • (数据库在我的情况下是只读的sqlite文件)

请注意,我完全了解允许用户执行任意SQL的一般危险,因此我想强调一点,我非常具体地询问使用select的限制 - 用于清理查询的子查询。

1 个答案:

答案 0 :(得分:2)

要阻止大多数这些陈述,请使用authorization callback

您也可以使用sqlite3_stmt_readonly()来阻止任何写入。

您应该确保没有任何危险的用户定义函数或虚拟表,并禁用load_extension()fts3_tokenizer()等函数。