我有一个webforms应用程序,允许用户向网站提交图像的URL。 然后我们在管理控制台中对这些图像进行筛选,然后在网站上提供这些图像供所有人查看。他们不必提交图像,它可以是包含图像的页面的链接。
默认情况下,Webforms会防止恶意输入,但仅限于将javascript注入输入框时。因此,它会立即选择<script type="text/javascript">alert('nasty code');</script>
但不会http://www.nastysite.com/nastyScript.js
这样的内容,因为这只是一个网址,并且“可能”是一个有效的图片。
在管理控制台中,我列出了datalist控件中的所有提交内容,并使用asp:Image控件显示图像以供检查。
如果用户要提交恶意脚本,是否可以在呈现管理控制台页面时在浏览器中执行此操作?我自己尝试过编写一个脚本,该脚本挂钩到加载的文档中以显示警报,但没有任何反应。
我想我应该显示提交的URL以及渲染它,以便我可以检查任何奇怪的提交。
另一件令我担心的事情是,如果我批准来自其他网站的图片 - 他们以后可能会将有效图片换成令人讨厌的脚本吗?我会假设它不在img
标签中吗?
我是否忽略了任何潜在的弱点?
答案 0 :(得分:1)
从其他网站提取的任何图片都应保存在本地服务器上,就像用户直接上传一样。这不仅会阻止用户在您批准后更改图像,而且如果父网站将其删除,则可以防止图像在您批准后死亡。
至于清理传入文件 - 是否可以在上传时检查传入文件并获取其内容类型或甚至是其扩展名,并根据良好扩展名列表对其进行验证。例如,用户只能提交png,jpg和gif图像?
答案 1 :(得分:1)
当Web浏览器将资源作为IMG标记的SRC加载时,它会将响应解析为图像文件。如果有人要将URL提交给JavaScript文件,结果只会是一个损坏/丢失的图像。
尽管如此,外部链接的照片仍然存在安全问题:
正如您已经说过的那样,有人可以在事后将图像交换到pr0n。
他们将能够跟踪您网站上看到图片的所有访问者的IP地址,时间戳和浏览器身份。根据访问者的浏览器设置,他们还可以设置Cookie,以便在用户访问您的网站和其他允许类似链接的用户时跟踪他们。这当然是所有仅图像横幅广告服务的工作原理。
如果特定浏览器容易受到格式错误的图像文件的影响,他们可能会将图像交换到这样的文件,然后可能会崩溃或锁定用户的浏览器。在极端情况下,它可能会让他们违反浏览器安全性。浏览器通常会对形象错误的图像攻击进行相对强化,但有可能发现另一种浏览器。
理论上,他们可以将图像文件更改为302重定向响应其他URL,这可能根本不是图像。访问者只会看到损坏的图像,但如果您有足够的流量,他们可以将这些重定向用于比如在另一个网站上执行DDoS。 (我把它放在“偏执狂”类别中。)