代码之家  ›  专栏  ›  技术社区  ›  Abe Miessler

这是Web应用程序漏洞吗?

  •  3
  • Abe Miessler  · 技术社区  · 15 年前

    我将一个变量传递给一个SWF文件,该文件提供对其他几个SWF文件的访问。您可以看到我用来将值赋给下面变量的行 THIS LINE 评论如下。

        <script type="text/javascript">
                    /*THIS LINE*/
                    var flashvars = {a: "<%= User.Identity.IsAuthenticated %>"};
                    /*
                       Some other stuff here...
                    */
            swfobject.embedSWF("index.swf", "myAlternativeContent", "100%", "100%", "10.0", "expressInstall.swf", flashvars, params, attributes);
        </script>
    

    我担心使用HTTP代理的人可能只需要切换 a 如果他们想要访问,从假到真。我担心是对的吗?

    是否有其他方法可以控制是否允许访问子SWF?

    5 回复  |  直到 15 年前
        1
  •  4
  •   ChrisLively    15 年前

    我会说,不要发射任何他们无法接触到的东西。在这种情况下,如果它们没有经过身份验证,就不要将任何脚本发送到浏览器。

    是的,你应该关心。

    假设您不能更改流(即:即使脚本没有经过身份验证,您也必须发送脚本),那么我会将“true/false”值更改为某种类型的键。在执行之前,子项应该验证是否传递了密钥。

    如果可能的话,让关键用户特定。

    这并不能完全解决这个问题,但对于某些人来说,提供一把他们没有的钥匙会更加困难。

    更新:
    基于非常好的评论,我有不同的路线。

    将Web请求处理程序(.ashx文件)添加到网站。让客户机调用它来加载SWF文件。处理程序应该首先测试它们是否确实已登录。如果是,请将文件送达。如果不只是关闭连接。

    基本上,将嵌入行更改为如下所示:

    swfobject.embedSWF("grabFile.ashx?id=123", "myAlternativeContent", "100%", "100%", "10.0", "expressInstall.swf", flashvars, params, attributes);
    

    然后在您的站点测试中有一个.ashx请求处理程序,用于在响应之前登录。写入swf文件的实际内容。

        2
  •  1
  •   Kendrick    15 年前

    是的,他们可以。安全性在客户端不起作用,您必须控制从服务器访问文件的权限。

        3
  •  1
  •   rook    15 年前

    是的,是什么阻止攻击者编写一个静态HTML页面来执行此操作:

    var flashvars = {a: "AUTHENTICATED"};
    
        4
  •  0
  •   dan_waterworth    15 年前

    是的,这是一个漏洞,您不需要使用代理来利用它。如果您的用户没有经过身份验证,您应该拒绝访问服务器。

        5
  •  0
  •   orokusaki    15 年前

    对。如果用户有firebug,他们可以简单地查看登录时应用程序代码的外观,然后将其更改为在未登录时镜像该代码。您应该根据每个请求和服务器端处理身份验证。如果您尝试:

    If User logged in:
        Put Flash in page
    Else:
        Put angry message
    

    用户仍然可以在登录时复制flash片段,在不登录时粘贴,使用firebug等。

    但是,如果您使用:

    Put Flash in page
    Listen for requests from the Flash app to the server (for database content):
        If the User who requests content is logged in:
            Return content
        Else:
            Return angry message
    

    这是可行的。

    如果整个应用程序是基于Flash的(即,它不需要数据库访问),那么保护它的唯一方法就是在服务器级别保护文件夹(参见amember等)。即使您使Flash应用程序依赖于服务器上的加密狗进行身份验证,用户也可以简单地下载您的Flash脚本,将其解压缩并分发以供免费使用。他们仍然可以通过文件夹保护来做到这一点,但至少自由用户不会有这种访问权。最好的办法是让应用程序依赖于来自服务器的内容。