这是一个Web应用程序漏洞吗?

时间:2010-11-29 17:38:35

标签: asp.net flash security

我将一个变量传递给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的值从False切换为True,如果他们想要访问的话。我有权担心吗?

我是否应该采用不同的方式来控制是否允许访问子SWF?

5 个答案:

答案 0 :(得分:4)

我想说不要发出任何他们无法访问的内容。在这种情况下,如果未对其进行身份验证,请不要将任何该脚本发送到浏览器。

是的,你应该担心。

假设您无法更改流程(即:即使未经过身份验证也必须发送脚本),然后我将“true / false”值更改为某种类型的密钥。孩子们应该在执行之前验证密钥已被传递。

如果可能,请使密钥用户具体。

这并不能完全解决问题,但有人提供他们没有的密钥会更难。

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

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

基本上将嵌入线更改为:

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

var flashvars = {a: "AUTHENTICATED"};

答案 3 :(得分:0)

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

答案 4 :(得分:0)

是。如果用户有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脚本,对其进行反编译并将其分发以供免费使用。他们仍然可以使用文件夹保护来执行此操作,但至少免费用户将无法访问该文件夹。最好的办法是让应用程序依赖来自服务器的内容。