安全的只读sqlite3数据库

bar*_*ter 7 sqlite security

我想给我的网站用户任意只读访问SQLite3数据库,而不让他们写入数据库或做任何其他损害.怎么样?

使db文件只读有一点帮助,但"ATTACH",".load"和".output"等命令允许人们读/写其他文件,这些文件可能不受保护.

当然,如果我知道所有这些命令,我​​只会过滤它们,但我最担心的是我没有想过的命令.

我曾尝试简单地改变sqlite3的源代码以禁止写入,但这比它看起来更难:即使SELECT语句似乎做了一些内部的INSERTS/etc.

注意: 我已经考虑过DOS攻击,并且会将cputime限制为5s或者其他什么.我主要担心的是文件损坏/"黑客攻击",而不是DOS.

chroot()可能有用,但看起来很极端.

思考?

编辑:哇,3年多前我真的问过这个吗?

从那以后,我实际上写了一个程序来做这件事.

我认为这是相当安全的(但我可能是错的).

这是一个示例查询.

dan*_*n04 1

当然,如果我知道所有这些命令,我​​只会过滤它们,但我最担心的是我没有想到的命令。

您是否考虑过使用白名单而不是黑名单?只允许以 SELECT 或 EXPLAIN 开头的语句。