【问题标题】:How to solve SQL injection for Athena?如何解决 Athena 的 SQL 注入?
【发布时间】:2018-11-22 05:42:34
【问题描述】:

我正在编写一个从 Athena 访问数据的 Spring Java 程序,但我发现 Athena JDBC 驱动程序不支持 PreparedStatement,有人知道如何避免在 Athena 上进行 SQL 注入吗?

【问题讨论】:

  • 对于其他数据库,Spring Data 将有助于防止 SQL 注入。但这不适用于 Athena AFAIK。

标签: sql-injection amazon-athena


【解决方案1】:

在准备查询之前,您必须将 SQL 查询格式化为字符串,并通过字符串连接来包含变量。

换句话说,欢迎来到大约 2005 年的 PHP 编程! :-(

这让您和您的应用程序代码有责任确保变量是安全的,并且不会导致 SQL 注入漏洞。

例如,您可以将变量转换为数值数据类型,然后再将它们插入 SQL。

或者,当可以声明一组可能允许的有限值时,您可以创建一个允许列表。如果您接受输入,请对照白名单进行检查。如果输入不在允许列表中,请勿将其用作 SQL 语句的一部分。

我建议您向 AWS Athena 项目提供反馈,并询问他们何时会在其 JDBC 驱动程序中提供对 SQL 查询参数的支持。发送电子邮件至 Athena-feedback@amazon.com

另请参阅此相关问题:AWS Athena JDBC PreparedStatement

【讨论】:

  • 这是使用 Athena 与 Google 的 BigQuery 相比的巨大缺点。
【解决方案2】:

Athena 现在支持prepared statements(在提出问题时并非如此)。

话虽如此,准备好的语句并不是在 Athena 中防范 SQL 注入攻击的唯一方法,而且 SQL 注入攻击并不像在数据库中那样严重。

  • Athena 只是一个查询引擎,而不是数据库。虽然删除表可能会造成破坏,但表只是元数据,数据不会随之删除。
  • Athena 的 API 不允许在同一执行中使用多个语句,因此您不能在不完全替换查询的情况下将 DROP TABLE foo 潜入语句中。
  • Athena 在设计上没有任何删除数据的能力。 Athena 具有可以创建新数据的功能,例如CTAS,但它会拒绝写入现有位置并且无法覆盖现有数据。

【讨论】:

    猜你喜欢
    • 2015-05-18
    • 1970-01-01
    • 2010-11-28
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多