我的服务器应用程序几乎在所有情况下都使用准备好的语句,以防止 sql 注入(inject)。尽管如此,还是需要提供特殊用户执行原始 SELECT 查询的可能性。
我怎样才能或多或少安全地确保查询不会修改数据库?是否可以只读执行查询,或者是否有任何其他“安全”方式确保没有人尝试任何 sql 注入(inject)? (使用sqlite3,所以我不能使用任何权限)
非常感谢!
最佳答案
JDBC 通过调用 Connection.setReadOnly(true)
支持只读连接.然而 javadoc 说:
Puts this connection in read-only mode as a hint to the driver to enable database optimizations.
一些 JDBC 驱动程序将强制执行只读请求,其他驱动程序将仅将其用于优化,或者干脆忽略它。不知道sqlite3
是怎么实现的。你必须测试一下。
否则,您可以对 SQL 语句进行“简单”解析,以确保它是一个单个有效的 SELECT
语句。
关于Java jdbc - 如何执行严格只读的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33214975/