Checkmarx 源代码分析工具将 mysql_fetch_array 标记为存储跨站点脚本攻击。如果是真正的错误,为什么以及如何解决?

Checkmarx source code analysis tool marking mysql_fetch_array as Stored Cross-Site-Scripting attack.. Why and how to solve if it is real bug?

Checkmarx 源代码分析工具将 mysql_fetch_array 标记为存储型跨站点脚本攻击。如果是真正的错误,为什么以及如何解决?以下为报告说明:

abc.php 第 1 行的方法从数据库获取数据,用于 mysql_fetch_array 元素。该元素的值然后在未经过适当过滤或编码的情况下流经代码,并最终在 abc.php 的第 1 行的方法中显示给用户。这可能会启用存储跨站点脚本攻击。如何解决这个问题?

如果不查看您的实际代码流,就无法判断。

但是,这很可能是一个实际的漏洞 - 存储型 XSS 是从数据库中提取不受信任的数据,并在没有任何清理或编码的情况下直接发送到网页输出的结果。您的代码很可能存在此问题。

简而言之,攻击者可以通过将有效但恶意的数据插入数据库(通过您的常规输入表单)来利用这一点。当另一个用户浏览该应用程序并访问这些记录时,该应用程序会提取该数据,并将其注入受害者的网页 - 创建脚本注入(也称为跨站点脚本)漏洞。
当然,这允许攻击者通过您的应用程序控制另一个用户的浏览器...

要修复它,只需对所有动态输出进行编码,而不考虑数据源,然后再将其插入网页。请注意,这必须根据特定的上下文来完成(例如 HTML 编码用于 HTML,属性编码用于 HTML 属性值,JavaScript 编码用于动态创建 javascript在 PHP 等)

有关详细信息,请参阅 this article on OWASP's wiki