gpt4 book ai didi

java - Statement.executeQuery() 和 SQL 注入(inject)

转载 作者:行者123 更新时间:2023-11-29 02:55:34 25 4
gpt4 key购买 nike

我们有基于网络的内部工具,允许对数据库进行任意 SQL 查询。对该工具的访问受到限制。与有人故意篡改数据或攻击相比,我更担心错误或事故。

查询最终由 Statement.executeQuery 执行并返回结果。我尝试了几次测试运行,似乎 executeQuery,如文档所示,在除 select 之外的任何其他调用上都失败。

是否有任何其他 SQL 语句/组合可以欺骗 executeQuery 调用以引起数据库中的更改(插入/更新/删除/删除等)。我尝试了几个 Web 上可用的 SQL 注入(inject)示例,但在所有情况下都失败了。

最佳答案

当查询参数连接到查询模板时,SQL 注入(inject)攻击是可能的,因此允许流氓攻击者注入(inject)恶意代码。

如果您的 Statement 查询不带任何参数,则客户端无法注入(inject)恶意 SQL 例程。每当您有参数化查询时,您应该改用 PreparedStatement

至于语句限制,您应该让DBA 为您提供一个数据库用户帐户,该帐户只能在应用程序架构上执行SELECT 和DML 语句。不应为应用程序用户帐户授予 DROP 和 TRUNCATE 权限。

如果您使用动态模式升级(例如 FleywayDB),您可以针对特定情况使用单独的数据库帐户和单独的数据源。

这样,您还可以保护自己免受因应用程序开发人员的失误而导致的数据损坏。

关于java - Statement.executeQuery() 和 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31017584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com