我有一个场景,我不确定我的方法是最好的,我希望得到反馈/建议。
情形: 我有一堆基于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数据库中的信息插入业务逻辑*
我正在考虑编写类似
的HttpModuleProcessRequest(){
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安全性并编写自定义成员资格提供程序?
有什么想法吗?
答案 0 :(得分:1)
您是否考虑过在swf加载后通过HTTP服务器验证资源访问权限?
在我工作的地方,我们通过flash为用户提供在线培训,而不是验证HTTP请求本身,我们允许首先加载swf,然后向服务器发出请求以验证用户是否应该访问swf和他们从我们网站内访问swf而不是从其他位置访问。
如果任何验证步骤失败(无法在必要位置找到auth文件,或者用户没有有效会话或无法访问特定培训),那么他们会在闪存中收到错误而没有重要内容的载入。
另外需要注意的是,如果您确定要严格限制对文件的访问权限,以便只有那些应该有访问权限的人才能加载它们,那么我建议您使用第二个选项来存储文件。单独的非公共位置,然后使用处理程序脚本加载swf。
答案 1 :(得分:0)
为什么不使用ISAPI过滤器?
好的,不要回答 - 充足的理由;-)。但严重的是,如果你拥有它的开发能力,你可能想要考虑这条路线。
否则,HTTP模块看起来似乎更好,如果你有一个简短的,必须处理的扩展名列表(GIF,JPG,MP3)。如果它很长,或者是开放式的,我会同意并放弃它。
您可能希望查看的另一个选项(如果适用)是基于角色的NTFS访问列表。如果这适合,它可能是最简单,最干净的方法。