我有一个系统,我希望人们可以在具有多个表格的多个数据库上进行任意选择查询。
我可以"消毒"通过简单地将它们嵌入子查询中来查询,即SELECT * FROM ( $USER_SELECT_QUERY )
?
这将允许用户进行任何类型的SELECT查询,但会在任何INSERT
,UPDATE
,DELETE
,EXEC
等查询中产生语法错误。您是否可以提出任何类型的查询来修改/插入/删除数据,或显示有关主机系统的其他无意的详细信息,例如目录列表或其他任何内容?
假设:
请注意,我完全了解允许用户执行任意SQL的一般危险,因此我想强调一点,我非常具体地询问使用select的限制 - 用于清理查询的子查询。
答案 0 :(得分:2)
要阻止大多数这些陈述,请使用authorization callback。
您也可以使用sqlite3_stmt_readonly()来阻止任何写入。
您应该确保没有任何危险的用户定义函数或虚拟表,并禁用load_extension()或fts3_tokenizer()等函数。