如何安全地转义 bigquery 节点插入的用户输入?可以在 bigquery.insert 节点库上使用参数化查询吗?

Dil*_*yle 4 javascript sql security node.js google-bigquery

我需要将用户表单中的数据插入 bigquery,我想知道清理/转义/清理数据的最佳方法是什么。我正在使用Google Cloud BigQuery 库

是否可以在该库的插入上使用参数化查询?我不知道如何,也许我需要使用 sql 插入而不是使用节点库插入(jsObject)?现在,我在将每个字符串放入 JS 对象之前使用 mysql 转义库,但我不确定这是否安全?

这是插入的样子:

bigquery
.dataset("analytics")
.table("actions")
.insert(someJSObjectWithUserInputData)
.then(() => {
    console.log(`Inserted row`);
})
Run Code Online (Sandbox Code Playgroud)

Fel*_*ffa 5

通过加载作业或流 API 运行插入时,为了安全起见,您不需要转义数据。问题table.insert是数据流传入,因此无需担心安全逃逸。

如果您选择INSERT INTO使用新支持的 DML 语句,那么您将不得不担心转义。在这种情况下,您可以使用提到的参数化查询。您可以将标识符@param_name和位置参数与 一起使用?

对于这种情况下的 Node.JS,您需要使用以下 API 参考,特别是params

params:对于位置 SQL 参数,提供值数组。对于命名 SQL 参数,提供一个将每个命名参数映射到其值的对象。

https://cloud.google.com/nodejs/docs/reference/bigquery/1.2.x/BigQuery#query