在Athena中执行命名查询

Jug*_*kar 13 sql-injection named-query amazon-web-services amazon-athena

我们想要使用awsjavascript sdk在Athena中执行参数化查询.

似乎Athena的命名查询可能是这样做的,但是文档似乎非常神秘,无法理解如何去做.

如果有人可以帮我们做以下事情,那就太好了

  • 在athena中避免sql注入的推荐方法是什么?
  • 创建一个参数化查询,如 SELECT c FROM Country c WHERE c.name = :name
  • 传递name参数的值
  • 执行此查询

The*_*heo 5

不幸的是,命名查询是 Athena 的一个奇怪的功能,它对任何事情都没有真正的用处。

Athena 不像许多 RDBMS 那样支持准备好的语句。有一些 SQL 库支持在客户端进行参数扩展——Sequel for Ruby 是我有经验的,不幸的是我不能给你关于 JavaScript 的建议。

然而,使用 Athena 的 SQL 方言进行转义并不是很复杂。在标识符中,双引号需要转义为两个双引号,而在文字字符串中,单引号需要转义为单引号。其他数据类型只需要干净,例如只有整数的数字。

另外,请记住,在 Athena 中,SQL 注入的危险与在 RDBMS 中不同:Athena 无法删除您的数据。如果您正确设置了 IAM 权限,用户甚至无法删除表,即使您出于某种原因使用允许删除表的用户运行查询,表只是元数据,可以轻松地再次设置。

  • 此事有新进展吗?他们的原始博客文章 https://aws.amazon.com/blogs/mt/aws-cloudformation-features-update-support-for-amazon-athena-coverage-updates-for-s3-rds-kinesis-and-cloudwatch/明确指出:“命名查询可以从 AWS 管理控制台、CLI 手动执行,或者使用 API 调用以编程方式执行。” 但似乎没有办法通过 API 来做到这一点。 (2认同)