我们有一个基于C / C ++的产品生成的checkmarx报告,该报告提到有关CGI存储的XSS的内容,并指向scanf / printf或fgets / printf组合。它说'未验证的DB输出在file.c文件的第55行中找到。在printf的第55行'中发现了可能的XSS利用。
链接How to solve Stored XSS issue reported by Checkmarx讨论了类似的问题,但这是针对Java的-提出的解决方案是使用编码。 我们对C字符串有这样的编码吗?另外,我读到我们需要验证发送到printf的输入字符串。我不确定需要进行哪种验证。 报告所引用的代码中的语句为:
FILE * fp = fopen(...); // fp is valid
char buffer[256];
fgets(buffer, sizeof(buffer), fp);
printf( "%s", buffer ); // this is line 55
作为验证的一部分,我们是否应该检查缓冲区中是否存在'%'和'%n'个字符?