我们有一个非常简单的 ASP.NET Web 应用程序,主要包含静态内容和我们希望使用 SSL 保护的单一表单。安全页面位于其自己的文件夹中,但它继承自不安全的母版页,并且与网站的其余部分共享一些其他资源(徽标、CSS 文件和一些图片)。该站点由第三方托管,并且无法更改 IIS 配置(或更改为不同的主机)。
据我们了解,在 ASP.NET 上处理部分 SSL 时存在一些挑战:
- 防止出现“此页面包含安全和不安全项目”消息。
- 提供对相对 URL 的支持,因为它们在重定向到安全页面时默认不起作用。
由于潜在的性能问题,我们不想保护整个站点,因此仅保护一个特定页面或文件夹的最佳方法是什么,同时保证该页面加载的任何资源也将受到保护?
我最终使用所描述的解决方案覆盖了我想要保护的页面上的 OnInit 方法here https://stackoverflow.com/questions/377968/how-do-you-forward-http-request-to-a-https-url/378039#378039:
protected override void OnInit(EventArgs e)
{
if (!Request.IsSecureConnection && !Request.IsLocal)
{
UriBuilder builder = new UriBuilder(Request.Url)
{
Scheme = Uri.UriSchemeHttps,
Port = 443
};
Response.Redirect(builder.Uri.ToString());
}
base.OnInit(e);
}
对于其余页面,我从基页面继承,并在 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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)