【问题标题】:Denying file extensions in IIS拒绝 IIS 中的文件扩展名
【发布时间】:2014-04-21 23:22:32
【问题描述】:

在 IIS 中,我注意到我可以拒绝访问服务器上的任何文件扩展名。例如,我拒绝访问 .jpg 图像。但是浏览器将无法在我的网站上显示 .jpg 图片。

我想知道,IIS 是否允许我们拒绝对直接访问的文件扩展名或文件名的访问(通过在地址栏中输入完整的 url),同时在浏览器请求时仍将它们提供给浏览器文件?

【问题讨论】:

  • 我认为 Web 服务器无法真正判断它们是由文档还是直接请求。无论哪种方式,HTTP 请求看起来都一样。

标签: c# .net windows iis iis-7


【解决方案1】:

你不能真的阻止这样做;一个有决心的人可以下载网页可以下载的任何东西。但是,您可以通过检查请求中的 HTTP 引荐来源网址,让技术素养较低的人稍微困难一些。如果它是您的某个网页的 URL,您可以允许该请求。否则,你可以否认。这种技术经常用于防止深度链接。

这是一个示例(未经测试),说明如何使用 .NET HTTP 模块执行此操作:

public class ImageDenyingModule : IHttpModule
{
    public void Init(HttpApplication app)
    {
        app.BeginRequest += (s, e) => {
            var request = app.Context.Request;
            if (RequiresPageReferrer(request.Url) && !IsValidReferer(request.UrlReferrer)) {
                app.Context.Response.StatusCode = 404;
                app.Context.Response.End(); // Or something...
            }
        };
    }

    private bool RequiresPageReferrer(string url) {
    }

    private bool IsValidReferrer(string referrer) {
    }
}

【讨论】:

    【解决方案2】:

    您可以使用自定义 http 处理程序来做到这一点。

    http://support.microsoft.com/kb/308001

    如果您为 jpg 文件创建自定义处理程序,则可以检查请求的引用者并提供图像或取消请求。

    【讨论】:

      猜你喜欢
      • 2015-01-03
      • 1970-01-01
      • 2011-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      • 2012-10-01
      相关资源
      最近更新 更多