如何安全地嵌入任何Flash文件(SWF)?
我想允许我的用户在自己的帖子中嵌入自己的Flash动画。通常,实际文件托管在一些免费的图像托管站点上。除非用户单击一个按钮进行播放,否则我实际上不会加载闪光灯(因此在页面加载时不会自动播放)。我知道人们可以在Flash中做出一些非常令人讨厌的废话,但是我找不到关于Flash应用可能对查看器造成的潜在严重损害的任何信息。
从互联网上仅嵌入任何Flash文件是否不安全?如果是这样,我该如何让用户嵌入无害的动画,但仍将有害的应用程序拒之门外?
编辑:
据我所知,最明显的威胁是动作脚本会将我们重定向到恶意网站。
Adobe说我们可以设置allowScriptAccess = never和allowNetworking = none,而swf应该不能访问自身以外的任何内容。这样可以解决我所有的问题吗?
解决方案
回答
是的,这是不安全的。
没有简单的方法允许它。我们可能有一个允许YouTube,Hulu等通过的域白名单,但是白名单本质上是在不断更新。
回答
例如,Drupal有一个场景,即如何允许来自用户的Flash内容成为安全问题。
回答
Flash采取了一些整洁的安全措施。允许用户将swf上传到网站并嵌入它们是不安全的,我们基本上是在为XSS攻击做好准备。
但是,允许他们进行热链接应该不是问题。 SWF文件将被锁定到托管它的域,并且不允许在该空间之外调用url。
它将仍然对"邪恶链接"开放(我敢肯定有一个合适的词),并且我的意思是拥有指向yoursite.com/admin/deleteallpages.php的常规链接,它会尝试按"我们"的身份加载。但是它将无法以任何方式使用此数据,它基本上与普通链接相同,并且我想现代CMS可以免受此类攻击。
通过将Flash托管在另一个子域中,我们可以获得相同的保护,因为Flash认为这与完全不同的域相同。
回答
Adobe说我们可以设置allowScriptAccess = never和allowNetworking = none,而swf应该不能访问自身以外的任何内容。尽管allowNetworking仅在Flash Player 9中使用,所以使用Flash早期版本的用户仍然容易受到某些攻击。
创建更安全的SWF Web应用程序:HTML代码中的安全控件
如何从HTML限制SWF内容
回答
嵌入来自未知来源的SWF时,最好的做法是在加载程序上放置一个遮罩,以使加载的SWF不会占用比预期更多的屏幕空间。
伪代码可以这样做:
var maskSpr : Sprite = new Sprite(); maskSpr.graphics.beginFill(); maskSpr.graphics.drawRect(0,0,safeWidth,safeHeight); maskSpr.graphics.endFill(); myLdr.mask = maskSpr;
回答
实际上有多种选择。
为了完全安全,请设置allowScriptAccess = never和allowNetworking = none,而swf将无法访问其自身之外的任何内容。
注意:allowNetworking仅在Flash Player 9中(它是为响应各种myspace蠕虫而创建的),因此,我们需要使用SWF对象来确保只有具有正确Flash Player版本或者更好版本的用户才能加载Flash。
但是,如果要启用youtube视频之类的功能,则不能将allowNetworking设置为" none"。幸运的是,此字段"内部"具有中间级别的安全性,它使SWF可以与其托管域进行通信。
还要注意,最好不要在站点上拥有crossdomain.xml文件,以了解更多有关此处和其他地方的危险的信息。
以下是其他答案中提到的其他一些站点,这些站点将进行更详细的介绍:
http://www.adobe.com/devnet/flashplayer/articles/secure_swf_apps_04.html
http://blogs.adobe.com/stateofsecurity/2007/07/how_to_restrict_swf_content_fr_1.html