gpt4 book ai didi

asp.net - IHTTPModule 在 ASP.NET 中在 HTTP 和 HTTPS 之间切换

转载 作者:太空宇宙 更新时间:2023-11-03 12:57:44 26 4
gpt4 key购买 nike

我正在处理一个包含需要通过 SSL 保护的部分的网站。

我已配置站点,以便它始终在 SSL 时运行良好,我在 IE7/IE8/FireFox/Safari/Chrome 中看到 SSL 挂锁

为了实现 SSL 切换,我创建了一个实现 IHTTPModule 并连接 HTTPApplication.PreRequestHandlerExecute 的类。

我通过一些自定义逻辑来确定我的请求是否应该使用 SSL,然后我重定向。我必须处理两种情况:

  • 目前使用 SSL,请求不需要 SSL
  • 目前不在 SSL 中,但请求需要 SSL

我最终做了以下操作(其中 ctx 是 HttpContext.Current,pathAndQuery 是 ctx.Request.Url.PathAndQuery)

// SSL required and current connection is not SSL
if (requestRequiresSSL & !ctx.Request.IsSecureConnection)
ctx.Response.Redirect("https://www.myurl.com" + pathAndQuery);
// SSL not required but current connection is SSL
if (!requestRequiresSSL & ctx.Request.IsSecureConnection)
ctx.Response.Redirect("http://www.myurl.com" + pathAndQuery);

现在来回切换工作正常。然而,当我进入 SSL 模式时,FireFox 和 IE8 警告我我的请求没有完全加密。

看起来我的模块以某种方式短路了我的请求,如果有任何想法,我将不胜感激。

最佳答案

我怀疑,当您确定哪些资源需要加密,哪些不需要时,您不包括图像,或者一些页眉和页脚,甚至 CSS 文件,如果您使用的话。

由于您总是为此类内容放弃 SSL,因此页面的一部分(主要 html)可能需要 SSL,但对此页面上的图像的后续请求却不需要。

浏览器警告您,页面的某些部分未使用 SSL 传送。

我会检查请求是否针对 HTML,然后才在需要时删除 SSL。否则,请保持原样(很可能图像等是用相对路径引用的,而不是完整的 url)。

即,如果您有:

<html>
<body>
Some content...
<img src="images/someimage.jpg">
</body>
</html>

并且您使用 SSL 请求此页面,但是您对 requestRequiresSSL 的评估没有将图像视为安全资源,它将形成一个 http 而不是 https 请求,您将看到警告.

请确保当您请求资源并评估 requestRequiresSSL 时,检查引荐来源网址以及这是否是图像:

// SSL not required but current connection is SSL
if (!requestRequiresSSL && ctx.Request.IsSecureConnection && !isHtmlContent)
ctx.Response.Redirect("http://www.myurl.com" + pathAndQuery);

只需弄清楚如何确定 isHtmlContent(如果您不提供来自数据库等的图像,而是来自磁盘位置),只需检查资源文件名(.aspx、.asmx、.ashx、.html、等)。

这样,如果连接是加密的,但资源本身不是 html,也没有设置“加密”,您就不会放弃加密。

关于asp.net - IHTTPModule 在 ASP.NET 中在 HTTP 和 HTTPS 之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/616904/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com