java - 如何防止 Google Big Query 上的查询注入(inject)

标签 java sql google-bigquery

我正在为我们的网站编写一些 Google Big-query 动态报告实用程序,这将允许用户选择要在查询中替换的参数。鉴于此查询"template":

SELECT  name ,
        birthday
FROM    [dataset.users]
WHERE   registration_date = '{{registration_date}}'

我们从用户那里获取 {{registration_date}} 值并将其替换到模板中,从而生成一个查询:

SELECT  name ,
        birthday
FROM    [dataset.users]
WHERE   registration_date = '2013-11-11'

假设我正在使用 Google Big-query 客户端 API 执行查询,我如何才能在这种情况下防止类似 sql-injection 的攻击, 并且 API 不允许像传统的 RDBMS api 那样使用定位参数。

最佳答案

自从在 BigQuery 中推出标准 SQL 以来,就可以使用 query parameters作为一种防止 SQL 注入(inject)的方法。在您的查询中,您可以使用 @ 后跟名称来指定命名参数,例如

SELECT x, y FROM T WHERE x <= @x_max AND y = @target_y;

然后您可以通过 API 的 query_parameters 属性提供参数值。

关于java - 如何防止 Google Big Query 上的查询注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20805617/

相关文章:

java - Springboot swagger url 显示 WhiteLabel 错误页面

java - 生成具有随机行长度的随机二维数组

java - UnsatisfiedLinkError 是什么意思?

java - 用 Java 完成关系型、持久性、SQL 类型数据库的最简单方法

mysql - 如何按两个字段排序?数据库

google-cloud-platform - BigQueryIO - 流和 FILE_LOADS 的写入性能

python - 无法使用 python 基于 BQ 中的查询创建另一个表

java - 如何将文件复制到其他目录

MySQL 查询 : Aggregation at two different level

mysql - 将 mysql 数据库导入 Bigquery 的最佳方法