【发布时间】:2011-12-29 19:14:43
【问题描述】:
我允许人们将 .swf 文件(游戏)上传到我的服务器。我对它们进行了审查,并将好的内容发布在网站上。理论上能不能把纯flash上传脚本放到游戏里,把恶意文件上传到服务器?所有的 Flash 上传脚本通常需要一个 php/asp/whatever 脚本来捕获上传并从那里获取。这可以在理论上用 prue flash 来完成,如果是这样....你如何防止它?
【问题讨论】:
我允许人们将 .swf 文件(游戏)上传到我的服务器。我对它们进行了审查,并将好的内容发布在网站上。理论上能不能把纯flash上传脚本放到游戏里,把恶意文件上传到服务器?所有的 Flash 上传脚本通常需要一个 php/asp/whatever 脚本来捕获上传并从那里获取。这可以在理论上用 prue flash 来完成,如果是这样....你如何防止它?
【问题讨论】:
按照可能性递减的顺序(可能性较大 -> 可能性较小):
从您的服务器提供的任何 SWF 都可以调用服务器可用的脚本。如果这些脚本上传了任何东西,那么 SWF 就可以使用它们。
如果您的服务器提供适合套接字的跨域,则 SWF 可以实现 Telnet、FTP、SSH 和许多其他基于 TCP 的协议。如果您的服务器接受使用这些协议的自动上传,SWF 可以使用它们。
SWF 文件可能有一个名称,例如,如果使用 Unix 搜索 find 可能会被理解为对另一个命令的调用(例如,Unix 文件名允许换行符,因此程序从另一个如果您不够小心,使用 shell 的程序可能会意外引发参数扩展/随机代码执行)。
任何一般的漏洞都可以被利用,例如,如果作恶者知道一种将 SWF 文件提供给读取它的程序的方法,并以某种方式强制该程序泄露一些机密信息;当然,那么一切皆有可能。然而,SWF 在这方面没有优势,如果机会出现,任何文件都可以同样“有用”。
【讨论】:
简短回答:不,但您应该关注 XSS。
但是,从技术上讲,您在测试 swf 文件时很容易受到攻击。虽然 Adobe 通常会尝试通过将 .swf 文件放入沙箱来保护其用户,但您可以编写具有本地文件访问权限(但没有网络权限)的 swf 文件。
当您的服务器提供 swf 文件时,该 swf 文件正在客户端计算机上执行 - 而不是您的计算机。您的情况的唯一区别是 swf 文件在技术上与服务器本身在同一域上运行 - 因此 wvxw 是正确的,因为它可以访问您在该域上公开的服务。在正常情况下,Adobe 会阻止 swf 文件跨不同域访问资源(除非您在服务器根目录上放置了跨域文件。但是,这种保护主要是为了保护 swf 文件的用户而不是服务器。恶意攻击者可以轻松拦截对 crossdomain.xml 文件的请求并将其提供给自定义文件。这有效地允许 swf 文件向任何域发出请求。
如前所述,flash(或任何其他语言)可以利用文件系统上任何预先存在的漏洞。
您应该更加关注 XSS。从技术上讲,Flash 应用程序可以向不同的域发出请求以收集有关您的用户的信息。只是为了说明一点,一个真正狡猾的闪存应用程序可以在您批准后的某个时间点从另一个域(创建者已通过跨域文件批准)中提取其自己的 swf 文件。然后,此 swf 文件的行为可能与您批准的完全不同。
当您授予用户发布内容的权力时,这是一个普遍的问题。 XSS 攻击通常通过在服务器端解析恶意代码来阻止。在您的情况下,基本上不可能这样做,因为 swf 文件是二进制文件。
【讨论】: