为啥/如何将 `value="javascript:alert(1)"` 视为 OWASP 的 ZAP 工具中的 XSS 漏洞?

Posted

技术标签:

【中文标题】为啥/如何将 `value="javascript:alert(1)"` 视为 OWASP 的 ZAP 工具中的 XSS 漏洞?【英文标题】:Why/How is `value="javascript:alert(1)"` considered as a XSS vulnerability in OWASP's ZAP tool?为什么/如何将 `value="javascript:alert(1)"` 视为 OWASP 的 ZAP 工具中的 XSS 漏洞? 【发布时间】:2013-05-12 19:51:05 【问题描述】:

OWASP 的 ZAP 的结果对于消除我网站的易受攻击部分非常有用。

但是,我发现了很多我根本无法修复的结果。例如,它已将 javascript:alert(1); 放入变量的 get 参数之一。然后这个变量由 php 在隐藏元素的 value 属性中输出。所以最终的 html 看起来像:

<input type="hidden" name="someName" id="someID" value="javascript:alert(1);"/>

此值通常用于使用 JavaScript 填充下拉列表。如果为 1,则显示可选的搜索过滤器,如果为 0,则不显示任何内容。所以它只用于失败的字符串比较。

我看不出有什么办法可以利用它,警报不会像 ZAP 向我展示的其他攻击那样运行。输出经过编码,因此它们无法像之前发现的攻击一样,通过以 "/&gt; 提前结束引号或元素来注入 HTML,因为这些字符成为它们的 HTML 实体对应物。

这是否只是 ZAP 与页面源中的输入字符串匹配的误报,因为编码 javascript:alert(1); 仍然与 javascript:alert(1); 完全相同?

【问题讨论】:

可能有帮助***.com/questions/23838300/… 【参考方案1】:

该漏洞意味着 ZAP 设法将任意代码插入该输入字段。这意味着您很可能没有在应用中的某处验证用户输入。

您应该更加小心地生成该输入字段,并确保用于生成它的 GET 参数得到相应的验证。

请记住,安全总比抱歉(即您的应用受到威胁)要好。

【讨论】:

【参考方案2】:

是的,OWASP 的 ZAP 会尝试在您的网站上查找漏洞,并且它会自动运行。

如果成功将任何部分代码添加到您的网站,则该网站会自动被视为易受攻击。

如果您的网站只接受“0”或“1”作为隐藏输入的值,并且没有在任何地方保存或提示该值(即使是 cookie),这不是安全漏洞,您安全。

【讨论】:

【参考方案3】:

您的 HTML 对我来说看起来很安全。但是,考虑一个类似的情况:

<a href="javascript:alert(1);">test</a>

这将生成一个执行 JavaScript 的链接。可能是 ZAP 格外小心,因此此类案件会得到处理。

对于这种特定情况,您应该将用户提供的链接中允许的 URL 方案列入白名单。例如只允许 http、https、mailto 等。

【讨论】:

以上是关于为啥/如何将 `value="javascript:alert(1)"` 视为 OWASP 的 ZAP 工具中的 XSS 漏洞?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 MySQL 和 JPA 会发生“java.sql.SQLException: Incorrect string value...”

Java如何获取Json相同key对应的value?

Java语句字符串如何拼接与拆分

为啥登录时 ["value":"tag1" 变成 [object Object]?

为啥更新包含 `document.getElementById("text").value` 的变量不会改变 DOM? [复制]

java 中如何遍历hashMap的key所对应的value?