如何安全地嵌入任何Flash文件(SWF)?

时间:2020-03-05 18:47:40  来源:igfitidea点击:

我想允许我的用户在自己的帖子中嵌入自己的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