ArcGIS Server 标准化SQL查询、SQL注入问题的测试总结

问题描述

在设置了standardizedQueries:true的属性之后,存放在 Oracle SDE 中的数据发布成的REST服务,仍然可以通过在 Where 语句中传入参数 USER like 'SD%' 执行查询,从而可以在有限的次数内暴力试探出 SDE 连接的用户名。其中 USER 不是数据表中包含的字段,是 Oracle 提供的 SQL 函数。SD% 是 SDE 连接用户名的部分字母。

服务查询
设置标准化查询standardizedQueries属性

测试用例

GUID ArcGIS Server Oracle SDE standardizedQueries Result
1 10.7 12c 10.6 TRUE 正常屏蔽
2 10.7 12c 10.6 FALSE 成功执行
3 10.7 11g 10.6 TRUE 正常屏蔽
4 10.7 11g 10.6 FALSE 成功执行
5 10.6.1 11g 10.5 TRUE 正常屏蔽
6 10.6.1 11g 10.5 FALSE 成功执行
7 10.6 12c 10.6 TRUE 成功执行
8 10.6 12c 10.6 FALSE 成功执行
9 10.6 11g 10.6 TRUE 成功执行
10 10.6 11g 10.6 FALSE 成功执行
11 10.5.1 11g 10.5 TRUE 成功执行
12 10.5.1 11g 10.5 FALSE 成功执行
13 10.5 11g 10.5 TRUE 成功执行
14 10.5 11g 10.5 FALSE 成功执行

结论

通过对比分析,排除 Oracle 和 SDE 版本的影响,得出结论:

  • ArcGIS Server 10.6 及以前版本,无论 standardizedQueries 参数如何设置,都可以将 USER 作为 where 条件语句执行查询。
  • ArcGIS Server 10.6.1 和 10.7,强制执行标准化查询,在 standardizedQueries 参数设置为TRUE 时,将 USER 认定为无效。
Unable to complete operation.
An invalid where clause or definition expression has been requested: "user like 'SD%'"
  • 在ArcGIS Server 10.5.1的环境下,测试过安全补丁 ArcGIS-1051-S-SEC2018U2-Patch.msp ,问题依旧。
  • 目前方案:建议将 ArcGIS Server 升级到10.6.1或以上版本。

参考

  • USER FUNCTION
  • 强制执行标准化SQL查询

你可能感兴趣的:(ArcGIS Server 标准化SQL查询、SQL注入问题的测试总结)