我正在开发一个网站,其中包含需要通过SSL保护的部分。
我已经配置了网站,以便在它始终使用SSL时运行正常,我在IE7 / IE8 / FireFox / Safari / Chrome中看到SSL挂锁
为了实现SSL切换,我创建了一个实现IHTTPModule并连接HTTPApplication.PreRequestHandlerExecute的类。
我通过一些自定义逻辑来确定我的请求是否应该使用SSL,然后重定向。我必须处理两种情况:
我最终做了followng(其中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警告我,我的请求未完全加密。
看起来我的模块以某种方式短路我的请求,会感激任何想法。
答案 0 :(得分:4)
我怀疑,当你确定哪些资源需要加密,哪些不需要加密时,你不会包含图像,或者包括页眉和页脚,甚至包括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,并且没有设置“加密”,那么你就不会放弃加密。
答案 1 :(得分:1)
我强烈建议您使用此(免费/开源)组件来执行您正在尝试的操作:
http://www.codeproject.com/KB/web-security/WebPageSecurity_v2.aspx
答案 2 :(得分:0)
.Net通常不处理的任何内容(例如常规html和大多数图形文件)都不会执行httpmodule,因为它不会通过.net
最好的办法是在IIS级别处理此问题。有关如何配置服务器的信息,请参阅以下内容。
http://www.jameskovacs.com/blog/HowToAutoRedirectToASSLsecuredSiteInIIS.aspx
答案 3 :(得分:0)
答案 4 :(得分:0)
只需在整个网站,所有网页以及所有图片/脚本/样式表中使用SSL。这只是让一切变得简单。 IE和Firefox将不再抱怨,你将不再有疯狂的模块试图猜测是否应该重定向任何给定的请求等。
答案 5 :(得分:0)
对于普通用户来说,当Firefox模糊地告诉他们“你正在查看的部分页面在通过互联网传输之前没有加密”时,他们几乎不可能做出明智的决定。这与“有些错误”的引擎灯一样有用,实际上是在他们的信息被转移后告诉他们。
此消息应至少附带一个列表,提供URL,内容类型(图像,javascript,css)及其对用户的意义。顺便说一句,我在使用GMail时收到此消息。
在此之前,正如其他人所说,一旦确定了不安全的元素,您的代码就会起作用。然后,您可以使用Firebug(http://getfirebug.com)检查通过连接传递的内容。