外部链接的图像 - 如何防止跨站点脚本

时间:2010-09-06 15:02:11

标签: xss

在我的网站上,我希望允许用户添加对互联网上任何位置托管的图像的引用。然后,我的网站的所有用户都可以看到这些图像。据我了解,这可能会打开跨站点脚本的风险,如下面的场景: 用户A添加一个链接到他在自己的网络服务器上托管的gif。此Web服务器以这种方式配置,它返回javascript而不是图像。 用户B打开包含图像的页面。而不是看到图像,javascript被执行。

目前我目前的安全问题是,在保存和打开时,所有内容都会被编码。 我在服务器上使用asp.net(c#),在客户端上使用很多jquery来构建ui元素,包括生成图像标记。

这种对我的恐惧是否正确?我错过了其他重要的安全漏洞吗?最重要的是,我该如何防止这种攻击?我现在唯一可以想到的安全方法是webrequest服务器上的图片网址,并检查它是否包含除二进制数据以外的任何内容...

2 个答案:

答案 0 :(得分:2)

检查文件确实是图像无济于事。攻击者可以在服务器请求时返回一个东西,而在潜在的受害者发出相同请求时则返回另一个东西。

话虽如此,只要你将URL限制为只在img标签的src属性中打印,那么你就有一个CSRF缺陷,但不是XSS缺陷。

有人可以创建一个“图像”URL,其行如下: http://yoursite.com/admin/?action=create_user&un=bob&pw=alice 或者,更现实但更烦人; http://yoursite.com/logout/

如果所有敏感操作(注销,编辑配置文件,创建帖子,更改语言/主题)都有令牌,那么像这样的攻击媒介不会给用户带来任何好处。

但回到你的问题;除非有一些当前的浏览器错误我想不到你不会有XSS。哦,请记住确保他们的图片网址不包含奇数字符。即:"><script>alert(1)</script><!-的图像网址 - 显然可能会产生不良影响。我以为你知道要逃避这一点。

答案 1 :(得分:0)

您的安全性方法不正确。 不要以“我有用户输入,如何防止XSS”的方式处理该主题。而是这样处理:“我有用户输入-应该有严格的限制-即不允许通过”。然后在此基础上仅允许绝对必要的内容-彻底清除纯文本字符串以防止除URL以外的任何内容,以及仅URL的特定必要字符。然后,一旦消毒,我应该只允许图像。测试很困难,因为它很容易被欺骗。但是,仍应对其进行测试。然后,因为您使用的是输入字段,所以应确保将JavaScript脚本和转义字符,HTML,XML和SQL注入中的所有内容都转换为纯文本,并使其无害且无用。认为您的用户既是白痴又是黑客-他们将错误地输入所有内容,并尝试将某些内容侵入您的输入空间。

此外,您可能会遇到有关版权的法律问题。未经版权所有者的同意和许可,通常不得以他人书面形式(或通过电子邮件获得)版权图像。因此,让用户有机会简单地从网站上举起图像可能会冒着风险,允许他们未经许可而获取受版权保护的材料并将其重新发布到您的网站上,这是非法的。有些网站可以引用来源,有些则需要付费,而其他网站会起诉您,并将您的整个域名下架,以侵犯版权。