如何防止Google Big Query上的查询注入

时间:2013-12-27 18:08:41

标签: java sql google-bigquery

我正在为我们的网站编写一些Google Big-query动态报告工具,允许用户在查询中选择要替换的参数。鉴于此查询“模板”:

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 sql-injection客户端API执行查询,我如何能够阻止Big-query类攻击, 并且API不允许使用传统RDBMS apis上的定位参数。

2 个答案:

答案 0 :(得分:6)

在OWASP中检查“防御选项3:转义所有用户提供的输入”:

https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet#Defense_Option_3:_Escaping_All_User_Supplied_Input

更新:参数化查询现在是一个选项

答案 1 :(得分:5)

自从在BigQuery中启动标准SQL以来,可以使用query parameters作为防止SQL注入的方法。在查询中,您可以使用@后跟名称(例如

)指定命名参数
SELECT x, y FROM T WHERE x <= @x_max AND y = @target_y;

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