客户端SQL注入(基于DOM的存储)
描述:客户端SQL注入(基于DOM的存储)
当存储用户输入并随后嵌入DOM的一部分中,然后将基于DOM的漏洞存储在该响应中,然后通过客户端脚本以不安全的方式处理该响应。攻击者可以利用数据存储来控制响应的一部分(例如,JavaScript字符串),可用于触发基于DOM的漏洞。
当脚本以不安全的方式将可控数据合并到客户端SQL查询中时,客户端SQL注入会产生。攻击者可能能够使用漏洞来构建一个URL,如果另一个应用程序用户访问,将在用户浏览器的本地SQL数据库中执行任意SQL查询。
漏洞的潜在影响取决于应用程序对SQL数据库的使用。如果数据库用于存储敏感数据(例如在社交网络应用程序中的消息),则攻击者可能能够检索此数据。如果数据库用于存储未决的用户操作(例如在电子邮件应用程序中传出消息),则攻击者可能能够修改此数据并代表用户执行操作。
Burp Suite会使用静态代码分析自动识别此问题,这可能会导致实际上并非可利用的误报。应审查相关的代码和执行途径,以确定是否确实存在此漏洞,或者是否存在缓解能力以阻止剥削。
修复:客户端SQL注入(基于DOM的存储)
避免基于DOM的客户端SQL注入漏洞的最有效方法是将参数化查询(也称为准备好的语句)用于所有数据库访问。该方法使用两个步骤将潜在的污染数据合并到SQL查询中:首先,应用程序指定查询的结构,将占位符留给每个用户输入的项目;其次,申请指定每个占位符的内容。由于查询的结构已经在第一步中定义了,因此在第二步中不可能畸形的数据干扰查询结构。在JavaScript executesql()API中,可以使用查询字符(?)在查询字符串中指定参数化项目,对于每个参数化项目,将一个附加参数传递给包含项目值的API。强烈建议您进行参数化每一个即使没有明显污染数据库查询的可变数据项,也可以防止发生监督,并避免应用程序代码库中其他地方的更改引入漏洞。
参考
脆弱性分类
典型的严重程度
高的
类型索引(HEX)
0x00200332
类型索引(十进制)
2097970