基于业务逻辑屏蔽web资源的策略是什么



我有一种情况,我真的不确定我的方法是最好的,我希望得到反馈/建议。

场景:我有一堆基于flash(swf)的"模块",它们托管在我的aspnet应用程序中。每个闪存在文件系统上都有自己的目录,其中包含闪存的资产。考虑一下这个简化的站点结构:

/webapp/index.aspx
/webapp/flash/flash1/flash.swf
/webapp/flash/flash1/someimage.jpg
/webapp/flash/flash1/someclip.mp3
/webapp/flash/flash2/flash.swf
/webapp/flash/flash2/someimage.jpg
/webapp/flash/flash2/someclip.mp3

其中命名约定为/webapp/flash/flash[ID]/

我想实现一种安全机制,检查是否应该允许用户访问子文件夹"[ID]"中的文件及其内容。

**在此插入基于存储在SQL数据库中的信息的业务逻辑*

我正在考虑写一个HttpModule,它可以做一些类似的事情

ProcessRequest(){
    if(Request.RawUrl.Contains("/webapp/flash") && !userHasValidLicenseForModule(1)){
        Redirect("login.aspx");    
    }
}

但是有一个缺点,HttpModule只适用于映射到aspnet的文件扩展名(在IIS6中)。这意味着我必须将所有可能的扩展映射到该进程(.mp3、.jpg等),这是我宁愿避免的。

我还考虑使用HttpHandler,但flash文件需要能够使用相对URL链接到它的资源。(所以像/webapp/getprotectedstuff.ashx?file=flash1234/flash.swf这样的代理模式是不可取的)

也许更明智的做法是将闪存文件和资产完全存储在web根目录之外。也许还有其他我没有想到的策略。

使用aspnet安全性并编写自定义成员资格提供程序?

有什么想法吗?

您是否考虑过在swf加载后通过对服务器的HTTP请求来验证资源访问?

在我工作的地方,我们通过flash为用户提供在线培训,但我们不验证HTTP请求本身,而是允许先加载swf,然后向服务器发出请求,以验证用户是否应该访问swf,以及他们是否从我们的网站内而不是从其他位置访问swf。

如果验证的任何步骤失败(或者在必要的位置找不到身份验证文件,或者用户没有有效的会话或无法访问特定的培训),则他们会在flash中收到错误,并且不会加载任何重要内容。

另一点需要注意的是,如果您决定严格限制对文件的访问,以便只有那些应该有访问权限的人才能加载这些文件,那么我可能建议您使用第二种选项,将文件存储在一个单独的非公共位置,然后使用处理程序脚本加载swf。

为什么不使用ISAPI过滤器
好吧,不要回答这个问题——原因很多;——)。但说真的,如果你有足够的开发能力,你可能会考虑这条路线。

否则,如果你有一个简短的、封闭的扩展列表(GIF、JPG、MP3),HTTP模块似乎是更好的途径。如果它很长,或者是开放式的,我会同意并放弃。

如果适用的话,您可能想要查看的另一个选项是基于角色的NTFS访问列表。如果适合,这可能是最简单、最干净的方法。

最新更新