问题
使用从基于 SQL 的数据源中或从 Rserve 服务器中获取数据的 Tableau 工作簿时,您可以使用直接发送至数据源的表达式创建计算,这些表达式称为直通表达式。以下 Tableau Desktop 文档中描述了这些表达式类型:直通函数是名称以 RAWSQL_
或 SCRIPT_
开头的函数。
在某些情况下,直通表达式可能是 SQL 注入攻击的矢量 — 即,攻击者或许能够在表达式中以值形式包括恶意命令。当工作簿包含满足以下所有标准的计算时,可能会出现这种情况:
-
计算包括
SCRIPT_
或RAWSQL_
函数。 -
表达式使用在工作簿中通过参数传送到计算的值。
-
参数以字符串形式键入。
-
此参数是第一个传送至计算的参数。
-
该参数未被引号引起来。
例如,在以下表达式中,Parameter 1
可能旨在包含字符串值,例如“小”、“中”或“大”。
RAWSQL_STR([Parameter 1])
但是,如果用户可以将 Parameter 1
的值设置为任意文本,则该用户或许可以创建 SQL 注入攻击。
由于像这样的表达式可能包括恶意命令,所以它被称为不安全的脚本。
请注意最后一个标准 — 不安全的脚本包括没有引号的参数。请考虑以下示例:
RAWSQL_BOOL("%1", [Parameter 1])
此示例未构成不安全的脚本,因为Parameter 1
的值包括在引号中,因此 SQL 未将此值视为命令。