有没有办法创建受保护的下载链接,该链接是随机的,到期的,需要密码并指向与IIS 7.0关联的C#中的特定文件?
几个随机链接可以链接到同一个文件。
内置代码或第三方库?
例如,http://www.example.com/<some random gibberish>/<md5 of file>/file.jpg
答案 0 :(得分:2)
执行此操作的一种方法是使用GUID。 GUID被设计为不会发生冲突,并且该设计也会导致难以猜测有效的GUID。我相信有人会告诉我这不是很安全!好吧,你也用密码保护。在C#中生成GUID非常容易。
我猜你需要的是首先以这种方式摄取你想要保护的文件的方法,其次是一个处理器,它将响应给定路径中的请求并检查路径中的GUID以确定它是否有效
然后,您需要一个数据库后端来维护与URL对应的GUID列表,密码(最好是加密的)和到期日期。处理程序将检查所请求的URL / GUID的条目以查看链接是否已过期,然后提示用户(可以通过Web表单轻松地完成此操作)以获取密码,并根据存储在数据库中的加密密码进行检查。
要生成GUID,您需要:
System.Guid.NewGuid().ToString()
要创建在每个请求之前调用的模块(对于IIS7),您可以像这样在web.config中添加一个条目:
<modules>
<add name="MyDownloadModule" type="Example.MyDownloadModule, Example"/>
</modules>
其中MyDownloadModule是包含处理程序的类,在命名空间Example。
中在该类中,您需要实现IHttpModule接口,特别是覆盖方法:
public string ModuleName {
get { return "MyDownloadModule"; }
}
public void Init(HttpApplication app) {
// Add an event handle which is called at the beginning of each request
app.BeginRequest += new EventHandler(this.AppBeginRequest);
}
//
// Our event handler for the BeginRequest event
//
private void AppBeginRequest(Object source, EventArgs e)
{
HttpRequest request = app.Context.Request;
//
// Is this a file download?
//
if (request.AppRelativeCurrentExecutionFilePath == "~/downloads") // or whatever
{
// this is where you work your GUID inspecting magic
}
}
以这种方式进行操作意味着将向服务器发送每个请求,这可能不是您想要的。
答案 1 :(得分:0)
您可以随时创建自己的HttpHandler,然后实现自己的专有过期/验证代码。
类似的东西:
http://www.example.com/download?token={your_token}
让处理程序拦截请求并从磁盘中获取文件,如果?token querystring值正确,则将其传递给客户端将是一件小事。
有关IHttpHandler接口的详细信息,请参阅MSDN http://msdn.microsoft.com/en-us/library/system.web.ihttphandler.aspx