如何解决Athena的SQL注入?

Tsi*_*ing 6 sql-injection amazon-athena

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

Bil*_*win 10

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

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

这会对您和您的应用程序代码负责,以确保变量是安全的,并且不会导致SQL注入漏洞.

例如,在将变量插入SQL之前,可以将变量转换为数值数据类型.

或者,您可以在可以声明可允许的有限值集时创建白名单.如果您接受输入,请根据白名单进行检查.如果输入不在白名单中,请不要将其用作SQL语句的一部分.

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

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

  • 这是使用 Athena 与 Google BigQuery 相比的“巨大”缺点。 (3认同)

The*_*heo 6

雅典娜现在支持准备好的陈述(提出问题时情况并非如此)。

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

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