Javascript 使用XSS和Flashvars可以做什么?如何预防?

Javascript 使用XSS和Flashvars可以做什么?如何预防?,javascript,flash,actionscript-3,security,xss,Javascript,Flash,Actionscript 3,Security,Xss,最近,一个客户担心他们的SWF“不安全”,因为XML路径来自FlashVar。在我看来,这并不是一个真正的问题,因为SWF只显示图像/文本和一些按钮链接。我可以理解,有人如何通过路径到swf并添加一个远程XML路径来向按钮url目标添加javascript,但这真的会造成什么损害? 如。 他们可以改变 http://mysite.com/theflash.swf?xmlpath=xml/thedata.xml 对此 http://mysite.com/theflash.swf?xmlpath

最近,一个客户担心他们的SWF“不安全”,因为XML路径来自FlashVar。在我看来,这并不是一个真正的问题,因为SWF只显示图像/文本和一些按钮链接。我可以理解,有人如何通过路径到swf并添加一个远程XML路径来向按钮url目标添加javascript,但这真的会造成什么损害?
如。 他们可以改变

http://mysite.com/theflash.swf?xmlpath=xml/thedata.xml
对此

 http://mysite.com/theflash.swf?xmlpath=http://dodgysite.com/thechangeddata.xml
显然,他们可以围绕这个构建一个虚假的包装器html文件,但我仍然不明白他们如何利用这个做任何有害的事情。我错过什么了吗

我的下一个问题是防止这种情况发生的最佳方法是什么?
到目前为止,我在XSS检查类中有:

  • 取消缩放字符串并移除任何 空格或换行符(\t\n\r)
  • 检查字符串中是否存在任何 以下内容(asfunction:,javascript:, 事件:,vbscript:)
  • 检查绝对或相对路径 通过查找(http或https)
  • 如果是绝对值,请检查域是否为绝对值 和主要电影一样
我在本文中发现了这一过程的大部分内容:

还有比这更好的方法吗?

还可以做些什么来防止flash中的XSS?

我认为您已经做得很好了

这可能并不总是可能的,但您也可以验证正在接收的数据结构


例如:如果XML包含图像的路径,您可以验证文件是否以.jpg/.png结尾,是否从正确的目录加载。

黑名单是一个糟糕的解决方案。隐含的假设是“如果我查找这些子字符串,我将能够捕获所有攻击”;这通常是错误的:

  • 您向站点(wiki/bug tracker/whatever)添加了一个“上传”工具,它将上传的文件粘贴在/userUploads/中。这有很多安全问题,但假设您设法过滤掉了“不安全”文件(包含JavaScript的HTML等)。好的
  • 攻击者上载一个XML文件。你的上传脚本认为它是“安全的”,因为它不是HTML,也不包含标签
  • 攻击者将某人发送到
    http://example.com/theflash.swf?xmlpath=../../../../userUploads/innocent.xml
  • 最终,您将试图通过查找几个子字符串来了解URL解析器将如何处理字符串。更有效的方法是通过URL解析器进行分析,然后自己提取相关的语义

    我认为一个潜在的安全选项是确保路径以“xml/”开头,并且不包含“/…/”,但这仍然是一个糟糕的“解决方案”

    一个更好的选项是白名单:文件名只能包含[A-z0-9_-]。使用“xml/$filename.xml”生成路径。如果您不做“test.xml”,这是可行的

    更好的选择是只维护从名称到路径的映射,例如,“data”映射到“xml/data.xml”,但“exploit”没有映射,因此返回错误。这意味着您无法轻松添加文件,但也意味着用户无法指定任意路径

    编辑:由于系统不同部分之间的意外交互(“文件系统上的所有文件都可以信任”)或错误的假设(“URL解析将给出同一“目录”下的URL”,“连接路径无法向上导航目录层次结构”,因此会出现类似的安全问题”,“所有文件名都是正常的”,“检查目录是否存在无法创建它”)。我已经给出了一个例子;毫无疑问还有其他例子

    如果需要使每个部署的配置不同,那么…使用config!foo.swf可以获取config.xml,其中包含允许的路径列表。更好的方法是让config.xml提供从页面名称到xml路径的映射


    一般来说,公开实现细节,如“所有路径恰好匹配
    xml/*\.xml
    “令人讨厌,是一种分层违规行为,看起来很像糟糕的安全性。

    黑名单不是一个好的解决方案,因为很难确保您涵盖了所有案例。您好!如果您知道所期望的数据结构类型,那么可以对其进行一些基本测试,以便在使用之前验证其真实性。使用您的参数,这实际上是白名单,因为数据结构将根据它必须具有的属性列表进行测试,而不是相反。谢谢您的评论。您的数据验证是一个好主意。感谢您的输入。我可以看到黑名单的问题,但是我不确定是否还有其他选择。(有限的)验证和白/黑列表的组合似乎是最好的选择。我不关心上传,只是保护任何部署的SWF站点。XML路径必须来自FlashVar的原因是这些构建部署在不同的国家,并且无法保证站点结构。因此,检查“xml/”或“./”不是一个选项,因为这需要两种(以及更多)可能性。对于这样的站点,XSS“攻击”有什么危险?