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

时间:2008-10-04 10:52:28

标签: .net asp.net security

我有一个场景,我不确定我的方法是最好的,我希望得到反馈/建议。

情形: 我有一堆基于flash的(swf)'模块',它们托管在我的aspnet应用程序中。每个flash在文件系统上都有自己的目录,其中包含flash的资源。考虑这个简化的网站结构:

/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这样的代理模式)

将Flash文件和资源完全存储在Web根目录之外可能更明智。也许我还没有想过其他策略。

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

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您是否考虑过在swf加载后通过HTTP服务器验证资源访问权限?

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

如果任何验证步骤失败(无法在必要位置找到auth文件,或者用户没有有效会话或无法访问特定培训),那么他们会在闪存中收到错误而没有重要内容的载入。

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

答案 1 :(得分:0)

为什么不使用ISAPI过滤器?
好的,不要回答 - 充足的理由;-)。但严重的是,如果你拥有它的开发能力,你可能想要考虑这条路线。

否则,HTTP模块看起来似乎更好,如果你有一个简短的,必须处理的扩展名列表(GIF,JPG,MP3)。如果它很长,或者是开放式的,我会同意并放弃它。

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