防止http页面重定向到https页面

时间:2017-08-25 02:55:34

标签: apache ssl browser https hsts

我有一个网站(userbob.com),通常以https的形式提供所有页面。但是,我试图让一个子目录(userbob.com/tools/)始终将内容作为http提供。目前,Chrome浏览器的HSTS功能(我不了解其工作原理)似乎迫使我的网站页面加载https。我可以访问chrome:// net-internals / #hsts并从Chrome的HSTS集中删除我的域名,下一个查询将按照我的意愿运行,而不会重定向到https版本。但是,如果我尝试第二次加载页面,它会再次重定向。我能让它工作的唯一方法是,如果我转到chrome:// net-internals / #hsts并在每次请求后从Chrome的HSTS设置中删除我的域名。如何让浏览器知道我希望userbob.com/tools/的所有页面都加载为http?我的站点使用apache / tomcat Web服务器。

(仅供参考,我希望工具目录中的页面通过http而不是https提供页面的原因是因为其中一些页面用于iframe http页面。如果我尝试从https页面iframe一个http页面我最终得到混合内容错误。)

3 个答案:

答案 0 :(得分:2)

HTTP严格传输安全(或HSTS)是您的网站可以发送给浏览器的设置,上面写着“我只想在我的网站上使用HTTPS - 如果有人试图转到HTTP链接,在您之前自动将其升级为HTTPS发送请求“。它基本上不允许您无意或有意地发送任何HTTP流量。

这是一项安全功能。 HTTP流量可以被拦截,读取,更改并重定向到其他域。仅限HTTPS的网站应将HTTP流量重定向到HTTPS,但如果最初仍通过HTTP发送任何请求,则存在各种安全问题/攻击,因此HSTS会阻止此操作。

HSTS的工作方式是您的网站在您的HTTPS请求中发送一个HTTP标头Strict-Transport-Security,其值为max-age=31536000; includeSubDomains。在此示例中,浏览器缓存此缓存并激活HSTS 31536000秒(1年)。您可以在浏览器Web开发人员工具中使用此HTTP标头,也可以使用https://securityheaders.io之类的网站。通过使用chrome://net-internals/#hsts站点,您可以清除该缓存并再次允许HTTP流量。但是,只要您通过HTTPS访问该网站,它就会再次发送标题,浏览器将恢复为仅限HTTPS。

因此,要永久删除此设置,您需要停止发送Strict-Transport-Security标头。在Apache / Tomcat服务器中找到它并将其关闭。或者更好的是先将它更改为max-age=0; includeSubDomains一段时间(告诉浏览器在0秒后清除缓存,因此只要您访问该网站,就可以关闭它而无需访问chrome://net-internals/#hsts用于获取此标头的HTTPS,然后在以后完全删除标头。

关闭HSTS后,您可以恢复使用HTTPS上的某些页面,以及使用标准重定向的HTTP上的某些页面。

然而,如果不警告你不要回到HTTP,那将是我的疏忽。 HTTPS是新标准,并且普遍推动鼓励所有网站转移到HTTPS并惩罚那些已完成的网站。阅读他的帖子了解更多信息:https://www.troyhunt.com/life-is-about-to-get-harder-for-websites-without-https/。虽然您无法在HTTPS页面上构建HTTP内容,但您应该考虑是否有其他方法可以解决此问题。您网站上的单个HTTP页面可能会导致安全问题,例如泄漏Cookie(如果未正确设置)。加上框架很糟糕,不应再使用了: - )

答案 1 :(得分:1)

您可以使用重写规则将https请求重定向到子目录中的http。在.htaccess目录中创建tools文件并添加以下内容:

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

确保已启用apache mod_rewrite

答案 2 :(得分:0)

基本上任何,来自HTTPS请求的HTTP 301响应表明,目标重定向到HTTP绝对不应该被任何浏览器接受,这样做的服务器明显违反了基本安全性,或者受到了许多损害。 但是,对HTTPS请求的301回复仍可以重定向到另一个HTTPS目标(包括在另一个域上,只要满足其他CORS要求)。

如果您浏览HTTPS链接(或javascript事件处理程序),并且浏览器开始加载该HTTPS目标,并以301重定向到HTTP,则该浏览器的行为应类似于500服务器错误或连接失败(DNS名称未解析,服务器未响应超时)。

这种服务器端重定向显然是无效的。网站管理员绝对不能这样做!如果他们想关闭服务并通知HTTPS用户该服务托管在其他地方并且不再安全,则他们必须返回一个没有重定向的有效HTTPS响应页面,这实际上应该是一个4xx错误页面(最有可能是404 PAGE) NOT FOUND),并且它们不应重定向到不符合CORS要求或发送错误的媒体类型(不接受所请求的语言并显示)的HTTPS服务(例如,第三方托管的搜索引擎或停车页面)该页面以另一种语言显示。)

实施HSTS的浏览器是完全正确的,并且朝着正确的方向发展。但是我真的认为CORS规范是一团糟,只是进行了调整,以便仍然允许广告网络托管和控制自己向其他网站广播的广告。

我强烈认为,出于正当理由仍希望展示广告(或任何用于衡量受众群体的跟踪器)的严肃网站可以将这些广告/跟踪器本身托管在自己的域中,并且使用相同的协议:服务器仍然可以让自己他们想要广播的广告内容,方法是自己下载/刷新这些广告并维护自己的本地缓存。如果希望第三方对这些数据进行分析,他们可以通过收集所需和想要的数据并在自己的服务器上对其进行过滤来跟踪观众:网站将不得不认真执行自己的隐私要求。

我现在讨厌太多的网站在访问时会被许多第三方跟踪,包括像Facebook和大多数广告网络这样的侵入性网站,以及质量/安全性和质量都非常差的第三方服务,发送非常糟糕的内容,这些内容是他们无法控制的(包括虚假广告,虚假新闻,宣传非法活动,非法业务,无效的年龄分级...)。

让我们回到网络的起源:一个站点,一个域,一个第三方。这并不意味着它们不能链接到其他第三方站点,而是只能通过明确的用户操作(点击或单击)来完成,访问者必须能够知道将要访问的内容或将要显示的内容

甚至可以在新闻文章中插入视频(例如Youtube):新闻网站可以为自己托管框架的静态图像缓存和“播放”按钮的图标:当用户单击该图标时,它将启动激活第三方视频,在这种情况下,第三方将直接与该用户互动并可以收集其他数据。但是未激活的内容将仅由原始网站根据其自己发布的政策进行跟踪。