首页 > 解决方案 > 在这些限制下是否可能发生 XSS 攻击?

问题描述

输出是:

<img src="http://example.com/[input]"
     oncontextmenu="openUrl('http://example.com/[input]')">

其中[input]是用户输入,通过此函数进行清理:

a => {
  a = String(a);
  a = this.replaceAll(a, "&", "&amp;");
  a = this.replaceAll(a, '"', "&quot;");
  a = this.replaceAll(a, "'", "&#39;");
  a = this.replaceAll(a, "<", "&lt;");
  return a = this.replaceAll(a, ">", "&gt;")
}

换句话说,我们似乎无法突破或使用任何形式的引号?

在这些限制下,是否可能发生 XSS 攻击?或者是否可以将用户重定向到除 example.com 之外的任何域?或者实际上,从 evil.com 加载图像(或向其发出请求)?谢谢!

标签: javascripthtmlsecuritybrowserxss

解决方案


是的,这是一个 XSS 漏洞。

虽然您确实很好地转义了 HTML 属性语法(这样就没有任何东西可以突破srcandoncontextmenu值),但它确实缺乏

  • 验证 example.com 路径。src属性值本身可能是恶意的,如果有人让访问者加载http://example.com/logouthttp://example.com/user-content?from=eve&file=bad-icon或者http://example.com/redirect.php?target=evil.com/,他们可能已经赢了。是的,这取决于谁控制 example.com 以及其中可能存在的漏洞,但是让受害者加载某些 URL 是许多攻击的一部分。
  • 转义 JS 字符串内容!比方说input'.replace(/.*/,'evil.com')+'你最终会得到oncontextmenu="openUrl('http://example.com/'.replace(/.*/,'evil.com')+'')". HTML 实体不会帮助你 -&apos;在属性'中成为脚本。

推荐阅读