【问题标题】:Prevent Http requests in Website basis on Config Value根据配置值防止网站中的 Http 请求
【发布时间】:2012-10-16 11:25:41
【问题描述】:

我已经实现了在 IIS 中部署的 ASP.Net 应用程序,并启用了 http 和 https 端口。现在我需要根据 Web.Config 值拒绝 HTTP 请求。如果此值设置为 True,那么它不应该接受 HTTP 附带的请求,就像它应该抛出错误 Invalid Operation.. Try requesting with Secure connection 一样。我做的第一件事是在 Global.asax 文件中检查如下:

  if (Utilities.Utility.HttpsCheck)
    {
        if (!Request.IsSecureConnection)
        {
            Response.Write("Invalid Operation");
        }
    }

在这个方法中我得到了一个异常request is not available in this context。我用谷歌搜索了这个错误,并知道在 ASP.NET 的全局文件中无法访问 Request

我尝试的下一个方法是在我的项目的每个页面中添加上面的代码,并在处理请求之前检查它。但是通过这种方式,我无法控制阻止对 HTML 页面的请求,我的项目中也有一些 html 页面,这些文件也需要限制。

如果我在页面中包含代码,那么它仅适用于该页面。但我在网站上也有一些图像/视频文件,这些也需要限制。

有没有更好的方法来做到这一点?请在这方面帮助我。

提前致谢。

【问题讨论】:

  • 为什么不直接删除 IIS 中的 http 绑定?
  • @JonEgerton - 是的,我可以删除 IIS 中的 Http 绑定,但有时我需要启用此 http 访问。这就是我检查基于代码的解决方案而不是每次都更改 IIS 配置的原因。

标签: c# asp.net c#-4.0


【解决方案1】:

您可以将 IIS 配置为仅接受 https。 Http 请求将自动被重定向。以下是如何配置 IIS 的示例。 http://support.microsoft.com/kb/324069

希望对你有帮助

【讨论】:

    【解决方案2】:

    一种非常简单的方法是对 Page 类进行子类化并在子类化页面中应用条件。你可以有一个限制的子类,一个不限制的子类。受限页面可以访问 Web 配置参数的值并根据需要进行重定向。

    public class HttpsPage : Page {
    
    
    protected override void OnLoad(..)
    {
     if (Utilities.Utility.HttpsCheck)
        {
            if (!Request.IsSecureConnection)
            {
                Response.Redirect(your-url);
            }
        }
    }
    }
    

    这很粗糙。这是对您问题的基于代码的答案,但根据您的“确切”要求可能有 20 种更好的方法。

    坦率地说,如果您不确定自己在做什么,那么我会非常仔细地考虑将任何您认为需要安全套接字的东西放到网络上......尤其是如果您放置的东西不是你的。

    【讨论】:

    • 感谢您的回复。这我已经实现了,但这对于 aspx 页面非常有效。但是我的网络应用程序中也有一些 html 页面,那么限制访问这个 htm 页面呢?
    【解决方案3】:

    我已经实现了 HTTP 模块,以根据我的配置值限制我的网站的 HTTP 访问。通过使用它,我还可以限制对图像文件和 html 页面的 HTPP 访问。这是我的模块代码:

    public void Init(HttpApplication context)
            {
                context.BeginRequest += new EventHandler(context_BeginRequest);
            }
    
            public void context_BeginRequest(Object source, EventArgs e)
            {
                //Code to reject the HTTP requests on basis of Config Value
                HttpApplication application = (HttpApplication)source;
                HttpContext context = application.Context;
    
                if (context != null)
                {
                    if (Utilities.Utility.HttpsCheck)
                    {
                        if (!context.Request.IsSecureConnection)
                        {
                            context.Response.StatusCode = (int)System.Net.HttpStatusCode.BadRequest;
                            context.Response.StatusDescription = "Secure connetion required";
                            context.Response.End();
                        }
                    }
                }
            }
    

    【讨论】:

      猜你喜欢
      • 2017-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-09
      • 1970-01-01
      • 2013-10-29
      • 2014-08-31
      • 2019-05-26
      相关资源
      最近更新 更多