我在veracode工具中运行了我的安全补偿申请。 每当工具发现任何记录时,它都会被检测为代码中的缺陷 这个缺陷在下面引用
日志输出中和不当
描述
函数调用可能导致日志伪造攻击。将未经过授权的用户提供的数据写入日志文件允许 攻击者伪造日志条目或将恶意内容注入日志文件。损坏的日志文件可用于覆盖 攻击者的踪迹或作为攻击日志查看或处理实用程序的传递机制。例如,如果是网络 管理员使用基于浏览器的实用程序来查看日志,可能会发生跨站点脚本攻击。**
在我的日志中,我打印来自其他界面的xml,没有与应用程序关联的GUI,所以我如何能够消除这个缺陷。
如果这不是提出这个问题的正确论坛,请告诉我。 感谢
答案 0 :(得分:2)
因此,将不受信任的数据转储到日志文件中存在两个主要问题。
首先,记录拆分(类似于HTTP标头拆分)。不受信任的输入放入换行符(或类似的,取决于日志文件的格式),然后是完全虚假的条目。
其次,如果您使用带有刚刚转储的日志文本的Web浏览器查看日志,那么您将接受XSS攻击。例如,这已用于调查哪些浏览器脚本小子正在使用(Opera很受欢迎)。
因此,将日志视为易受注入攻击(HTML,XML,SQL,HTTP标头等)的其他格式。您需要确保添加可能字符的白名单。您可以编写方法来执行此操作,并在每次日志调用之前清理输入。更好的方法是编写一个记录器,为任何输入输出安全文本(即使它有特殊字符,控制字符,非法代理对等)。
答案 1 :(得分:1)
问题似乎是未经过验证的用户提供的数据。您应该通过替换重要字符来清除传入数据以防止SQL注入或脚本攻击等问题。 - > &
等等。
您还应该明确指出,日志条目包含外部数据,可能包含损坏或误导性数据。也许就像
这样简单String logText = "User " + userID + "supplied: >>" + userData + "<<";
这样很清楚你的是什么以及来自外部用户的是什么。
答案 2 :(得分:1)
这都是很好的指导。在Veracode平台的Triage Flaws视图中,还可以直接链接到OWASP和其他来源的缺陷特定信息。
答案 3 :(得分:0)
我们应该验证来自用户的数据,因为用户/攻击者输入的数据可能包含垃圾字符。
解决方案: 只需将用户输入的数据传递到下面的库即可。 HtmlUtils.htmlEscape(输入)