2008-10-04 46 views
0

我有一个场景,我不确定我的方法是否是最好的,我很感谢反馈/建议。什么是基于业务逻辑屏蔽网络资源的策略

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

/webapp/index.aspx
/webapp/flash/flash1/flash.swf
/webapp/flash/flash1/someimage.jpg
/Web应用程序/闪光灯/ FLASH1/someclip.mp3
/webapp/flash/flash2/flash.swf
/webapp/flash/flash2/someimage.jpg
/webapp/flash/flash2/someclip.mp3

诸如此类

,其中命名约定是/Web应用程序/闪光灯/闪光灯[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文件和资产保存在网站根目录之外的全部。也许还有其他的策略我没有想过。

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

有什么想法?

回答

1

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

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

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

另外,如果您确定要严格限制文件的访问权限,以便他们只能由应该访问的用户加载,那么我可能会建议您使用第二个选项来存储文件一个单独的非公共位置,然后使用处理程序脚本加载swf。

0

为什么不使用ISAPI过滤器?
好的,不回答 - 很多原因;-)。但是,严肃地说,如果你拥有开发者的力量,那么你可能需要考虑这条路线。如果你有一个简短的,你必须处理的扩展名列表(GIF,JPG,MP3),HTTP模块似乎是更好的路线。如果它是漫长的,或者是开放式的,我会同意放弃这一点。

如果适用,您可能想要考虑的另一个选项是基于角色的NTFS访问列表。如果这适合,它可能是最简单和最干净的方式。