我的服务器应用程序几乎在所有情况下都使用准备好的语句来防止 sql 注入。然而,需要提供执行原始 SELECT 查询的特殊用户的可能性。
我如何或多或少地安全地确保查询不会修改数据库?是否可以执行只读查询,或者是否有任何其他“安全”方式确保没有人尝试任何 sql 注入?(使用sqlite3,所以我不能使用任何权限)
非常感谢!
JDBC 通过调用 来支持只读连接Connection.setReadOnly(true)
。但是 javadoc 说:
将此连接置于只读模式,作为对驱动程序启用数据库优化的提示。
一些JDBC 驱动程序将强制执行只读请求,其他驱动程序将仅将其用于优化,或者干脆忽略它。我不知道sqlite3
它是如何实现的。你必须对此进行测试。
否则,您可以对 SQL 语句进行“简单”解析,以确保它是单个有效SELECT
语句。