有没有办法创建一个 protected 下载链接,该链接是随机的、过期的、需要密码并指向与 IIS 7.0 关联的 C# 中的特定文件?
多个随机链接可以链接到同一个文件。
内置代码或第 3 方库?
例如,http://www.example.com/<some random gibberish>/<md5 of file>/file.jpg
最佳答案
执行此操作的一种方法是使用 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 接口(interface),特别是重写方法:
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
}
}
以这种方式进行意味着这将针对服务器的每个请求调用,这可能不是您想要的。
关于c# - 创建 protected 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2535601/