为啥/如何将 `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 向我展示的其他攻击那样运行。输出经过编码,因此它们无法像之前发现的攻击一样,通过以 "/>
提前结束引号或元素来注入 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...”
为啥登录时 ["value":"tag1" 变成 [object Object]?
为啥更新包含 `document.getElementById("text").value` 的变量不会改变 DOM? [复制]