ASP.NET Webforms中的部分SSL而不更改IIS配置
我们有一个非常简单的ASP.NET web应用程序,它主要由静态内容和一个我们希望用SSL保护的表单组成。安全页面位于其自己的文件夹中,但它继承自不安全的母版页,并与网站的其余部分共享一些其他资源(徽标、css文件和一些图片)。该站点由第三方托管,更改IIS配置(或更改为其他主机)不是一个选项 据我们所知,在ASP.NET上处理部分SSL时存在一些挑战:ASP.NET Webforms中的部分SSL而不更改IIS配置,asp.net,ssl,webforms,Asp.net,Ssl,Webforms,我们有一个非常简单的ASP.NET web应用程序,它主要由静态内容和一个我们希望用SSL保护的表单组成。安全页面位于其自己的文件夹中,但它继承自不安全的母版页,并与网站的其余部分共享一些其他资源(徽标、css文件和一些图片)。该站点由第三方托管,更改IIS配置(或更改为其他主机)不是一个选项 据我们所知,在ASP.NET上处理部分SSL时存在一些挑战: 防止出现“此页面同时包含安全和非安全项目”消息 提供对相对URL的支持,因为它们在重定向到安全页面时默认情况下不起作用 由于潜在的性能问题,我
由于潜在的性能问题,我们不想保护整个网站,那么,什么是只保护一个特定页面或文件夹的最佳方法,同时保证此页面加载的任何资源也将得到保护?我发现最简单的方法是向特定页面添加代码,检查当前请求是否使用HTTPS。如果不是,请使用HTTPS重定向到同一URL。然后,将使用SSL加载整个页面。然后,确保指向其他页面的链接或重定向使用绝对HTTP。换句话说,整个站点可以启用SSL,但不需要SSL,并且web站点的链接将控制它何时被使用 确保站点上的所有相对链接指向非HTTPS URL(即使当前页面当前正在使用HTTPS)的一种方法是使用HTML基本标记:
<head>
<base href="http://yourdomain/" />
</head>
SSL在站点级别工作,而不是在文件夹级别。一旦您安装了SSL证书,您的网站就可以使用https协议访问,如下所示:
https://www.example.com
。同时,您的网站仍可通过http://www.example.com
-没有性能问题
只要使用相对路径,图像和CSS文件将使用https协议加载。母版页永远不会被客户端单独请求,所以SLL在这里并不真正适用
使用此代码可以获得链接的绝对URL:
<a href='<%= "https://" + Request.Url.Host + Page.ResolveUrl("~/Secure.aspx") %>'>Click me</a>
我最终使用下面描述的解决方案覆盖了我想要保护的页面上的OnInit方法: 对于其余的页面,我从一个基本页面继承了以下关于OnInit方法的代码:
protected override void OnInit(EventArgs e)
{
if (Request.IsSecureConnection)
{
UriBuilder builder = new UriBuilder(Request.Url)
{
Scheme = Uri.UriSchemeHttp,
Port = 80
};
Response.Redirect(builder.Uri.ToString());
}
base.OnInit(e);
}
Thx雅各布。根文件夹上的母版页、图像和css文件怎么样?当客户端请求安全页面时,它们都将使用SSL加载?另外,是否有任何方法可以动态更改链接,使其不需要绝对URL?是的,母版页及其所有链接到资源的链接也将以HTTPS的形式提供,因此应避免出现“安全和不安全”消息。
protected override void OnInit(EventArgs e)
{
if (Request.IsSecureConnection)
{
UriBuilder builder = new UriBuilder(Request.Url)
{
Scheme = Uri.UriSchemeHttp,
Port = 80
};
Response.Redirect(builder.Uri.ToString());
}
base.OnInit(e);
}