ASP.NET MVC3:私有资源

时间:2012-08-14 13:55:14

标签: asp.net-mvc-3 resources private

有没有办法让资源变得私密。

我有一个视频内容网站。他们上传。文件存储在Web服务器上。

文件嵌入到网站上。

现在,如果我在Google Chrome中查看“源代码”,我会看到:

<object classid="clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6" height="400" width="600" >
<param name="URL" value="/Videos/Tree%20Felling.wmv" />
<param name="autoStart" value="False" />
<param name="uiMode" value="full" />
<param name="stretchToFit" value="True" />
<param name="volume" value="75" />
<embed src="/Videos/Tree%20Felling.wmv" width="600" height="400" type="application/x-mplayer2" autoStart="False" uiMode="full" stretchToFit="True" volume="75" />
</object>

正如您所见,现在已知道该位置。将此附加到网站地址,您是否可以直接访问该视频?这意味着您可以保存文件或从未实现登录的其他位置访问该文件。

是什么阻止他们使用网址并将其嵌入他们的网站等。

还是我错误地思考?

我该如何阻止这样的事情?

2 个答案:

答案 0 :(得分:1)

这是一个棘手的问题。我的解决方案是创建一个自定义HttpHandler(msdn article)并将其分配给一些自定义扩展 *。zzz,,因此当您为embed元素生成src时,它看起来像这样:/Videos/uploaded.zzz?id={someId}。然后在HttpHandler中,我会将id解析为所请求的视频并作为响应返回。如果您担心有人直接链接到/Videos/uploaded.zzz网址,您可以在返回媒体文件之前检查处理程序代码( ProcessRequest 方法)是否已授权用户(在请求期间登录)。你可以随心所欲,根据对文件的请求数添加限制等等。

我没有编写代码来测试它,但它应该是非常简单的。

答案 1 :(得分:1)

Following this, I found on another question.

解决方案是将web.config添加到您要拒绝访问的文件夹中。

<?xml version="1.0"?>
<configuration>
    <system.web>
        <authorization>
            <allow users="*"/>
            <deny users="?" />              
        </authorization>
    </system.web>
</configuration>

这意味着他们必须登录您的网站才能获得对媒体的访问权限。因此,不能播放视频/内容。