0

我已经实现了部署在 IIS 中并启用了 http 和 https 端口的 ASP.Net 应用程序。现在我需要根据 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。我用谷歌搜索了这个错误,并知道它无法Request在 ASP.NET 的全局文件中访问。

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

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

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

提前致谢。

4

3 回答 3

0

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

希望这可以帮助

于 2012-10-16T11:35:19.270 回答
0

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

public class HttpsPage : Page {


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

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

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

于 2012-10-16T11:36:23.367 回答
0

我已经实现了 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();
                    }
                }
            }
        }
于 2012-10-25T06:34:29.757 回答