将查询字符串值直接注入 HTML 是否会带来安全风险?

信息安全 xss javascript 阿贾克斯 跨域
2021-09-05 12:27:46

有人在我的网站上报告了一个我不认为是问题的错误。我的网站有一个类似这样的 URL:

www.site.com/ajax/ads.asp?callback=[text injection]

所以文件类型是应用程序/json,我看不出这会如何影响站点的安全性。

他的论点是,如果有人访问包含此内容的页面,它可以绕过 crossdomain.xml:

<script src=www.site.com/ajax/ads.asp?callback=[some javascript]></script>

我对此进行了搜索,但找不到任何说明他所说的是真的信息。如果我真的需要通过我的脚本来修复这个错误的每个实例,我需要有人告诉我这有多严重。

4个回答

明文注入是一个问题。假设您有一个如下所示的页面模板:

Hi <name>,

Blah blah blah.

您可以从 URL 注入。

攻击者可以构造一封带有 www.example.com/ajax/ads.asp?name=Foo%2C+you+have+the+wrong+version+Flash+plugin%2C+our+company+policy+ 链接的电子邮件需要+that+you+use+version+vul.ne.rabl.e.%0D%0A%0D%0AHi%020Foo(也可以缩小)。

这将使您的页面看起来像:

您好 Foo,您的 Flash 插件版本错误,我们公司政策要求您使用版本 vul.ne.rabl.e。

嗨,福,

等等等等等等。

该消息看起来像是来自您的站点,并且由于您的用户信任您的站点,他们可能会相信“您”给出的指示。

跨站点脚本不会对您的 Web 服务器的完整性构成威胁。相反,问题在于攻击者可以制作一个将执行任意 JavaScript 的 site.com URL。如果您的用户信任您的网站并允许它为所欲为,这可能是一个主要的安全漏洞。

想象一下,如果注入的文本是:

"></script><script>alert("hi");"

这将使它看起来像这样:

<script src="http://www.site.com/ajax/ads.asp?callback="></script><script>alert("hi");""></script>

然后,您有一个可以在页面中执行任何操作的自定义脚本。

他的论点是,如果有人访问包含此内容的页面,它可以绕过跨域策略:

<script src=www.site.com/ajax/ads.asp?callback=[some javascript]></script>

是的,他是对的。但这似乎不是一个安全漏洞,相反,它看起来像是一个功能。这种规避同源策略的技术称为JSONP(并且有很好的文档记录)。

但是,有一些问题:

  • content-typeJSONP 响应的正确方法是application/javascript,因为它们是可执行脚本。它不再是纯 JSON。
  • 如果你不知道 JSONP 或者它是如何工作的,那么你在使用它是很可疑的。这是否是一个严重的错误取决于您使用它的目的:
  • JSONP可以被利用,因为这是它的本质。确保您不发送任何机密数据,只发送您希望公开访问的信息。
    确保将任何对 JSONP 资源的请求视为没有凭据