c# - 创建 protected 链接

标签 c# .net

有没有办法创建一个 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/

相关文章:

c# - Outlook 如何创建任务请求?

c# - 将 C++ 控制台输出重定向到 C# 控制台不会打印任何内容

c# - 使用正则表达式将 dd/mm/yy 转换为 dd/mm/yyyy

c# - 在桌面上选择区域矩形

c# - 如何使用 LINQ 打印数字

c# - Roles.Enabled 为 true,即使 roleManger.enabled 设置为 false

c# - 一个好的做法是留下一个空的界面吗?

c# - 使用 ConfigurationManager 的 .Net Core 2.0 appsettings 和 .net 完整框架

c# - 我应该如何比较这些 double 以获得所需的结果?

c# - Transient 注入(inject) Singleton 有什么问题?