其余部分在https和http下保留部分网站的最佳做法

我有我的网站的某些部分是SSL后面的注册用户保留,并希望网站的其余部分是公开的,只有http服务。 目前它的设置是为了让所有的页面都是公开的,否则就是通过https服务的。 公开和非公开内容也都位于同一个webroot下。

你们可以build议我解决这个问题吗?或者是一个最佳实践指南? 谢谢!

编辑

我们使用LAMP堆栈。

这个Apache的伪conf将会做你所要求的:两个虚拟主机,一个使用SSL,并且从SSL所需的pathredirect到站点的HTTPS版本。

<VirtualHost *:80> ServerName www.sample.com DocumentRoot /var/www/www.sample.com Redirect permanent /secure https://www.sample.com/secure Redirect permanent /secure2 https://www.sample.com/secure2 </VirtualHost> <VirtualHost *:443> Servername www.sample.com DocumentRoot /var/www/www.sample.com SSLEngine On </VirtualHost> 

一旦您向用户提供了一个与其身份相关的cookie,最好将其保留在该站点的SSL版本上,以便他们的cookie不会被未encryption的咖啡店无线连接上的恶意用户劫持。 你有几个select做这个工作。 可以使用您的应用程序语言(例如PHP)来检测cookie,然后redirect到当前页面的SSL版本,或者在cookie存在时使用mod_rewrite强制SSL。 但这是另一个问题

首先,请注意,提供混合内容可能会触发浏览器警告,告诉用户并非他们所看到的内容都是“安全内容”。

其次,除非您遇到性能问题或延迟问题,否则可能不值得将安全和非安全内容分开。 与10-12年前相比,由SSL创build的边际服务器负载相当小,大部分的影响是由最初的连接协商引起的,无论如何,如果您的站点的任何部分需要SSL 。

这就是说,如果你需要提高性能,你可能会有潜在的用户困惑/烦恼,那么我build议设置一个单独命名的主机(例如,如果你的安全网站是www.sample.com,注册,例如,静态.sample.com作为该DNSlogging的CNAME /别名(或者,如果感觉过于奢侈,则作为单独的IP)),在没有启用SSL的情况下在Apache中为该名称设置一个新的VirtualHost,然后使用该位置存储静态内容。

如果您需要将SSL和非SSL内容按目录进行目录分离,最好的方法是在Apache中设置第二个VirtualHost,监听端口80,并指向SSL VirtualHost指向的位置,然后添加redirect您需要encryption的URI。 例如:

 <VirtualHost *:80> ServerName www.sample.com DocumentRoot /var/www/www.sample.com Redirect permanent /secure https://www.sample.com/secure </VirtualHost> <VirtualHost *:443> Servername www.sample.com DocumentRoot /var/www/www.sample.com SSLEngine On </VirtualHost> 

(我显然留了很多东西,不要试图复制和粘贴。)

最好的做法是不要混合使用http和httpsstream量。 混合内容可能构成安全漏洞。 攻击者可以调整非SSLstream量来访问SSL部分。

特别是Javascript是危险的。 但他们可以改变一个图像,改变页面上显示的说明。 过去,浏览器中也存在图像和CSS漏洞。

另一个讨论在这里 。

如果你真的想要,它很容易。 有两个Apache虚拟主机,一个SSL和一个不; 但其他方面相同。 然后在你的php代码中,适当地引用你的URL。

我这很多我的网站。 例如,该网站在您login之前是非SSL的,然后是完全的SSL。

最佳做法是强制受保护的页面只能通过HTTPS和非HTTP页面访问,不能通过HTTPS访问。 使用像PHP这样的语言,您可以检测到这一点,并将用户redirect到适当的协议。 如果需要,你也可以通过mod_rewrite进行设置。

您可能会注意到的一个问题是,如果您通过HTTP提供页面并发挥MITM攻击,则攻击者可以操纵HTML并将表单和链接更改为HTTP,以便攻击者仍可以监视。 因此,即使您只强制通过HTTPS访问页面,攻击者仍然可以窥探任何敏感数据。

目前提出的解决scheme是HTTP Strict Transport Security ,它已经在一些网站上使用。 这将强制HTTPS带入浏览器,所以即使表单动作通过MITM被破坏,浏览器也不会通过HTTP提交。

如果您将https和http内容混合在一起,则客户端会收到错误“未经身份validation的内容警告”。

Apache实际上很难混淆像这样的内容 – SSL和非SSL站点必须在单独的虚拟主机下定义 – 你只需要确保目录树不重叠。