apache 阻止http页面重定向到https页面

vbopmzt1  于 2023-03-09  发布在  Apache
关注(0)|答案(5)|浏览(259)

我有一个网站(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网络服务器。
(Just仅供参考,我希望工具目录中的页面通过http而不是https提供页面的原因是,其中一些页面是用于iframe http页面的,如果我试图从https页面iframe http页面,我最终会得到混合内容错误。)

toe95027

toe950271#

HTTP严格传输安全(或HSTS)是一个设置,你的网站可以发送到浏览器说:“我只想在我的网站上使用HTTPS-如果有人试图去一个HTTP链接,自动升级到HTTPS之前,你发送请求”。它基本上不会允许你发送任何HTTP流量,无论是无意或有意。
这是一项安全功能。HTTP流量可以被拦截、读取、更改和重定向到其他域。仅使用HTTPS的网站应该将HTTP流量重定向到HTTPS,但如果最初仍通过HTTP发送任何请求,则会出现各种安全问题/攻击,因此HSTS会阻止这种情况。
HSTS的工作方式是,您的网站在HTTPS请求中发送一个值为Strict-Transport-Security的HTTP报头Strict-Transport-Security。浏览器缓存此报头并激活HSTS 31536000秒(1年),在这个例子中。你可以在你的浏览器web开发工具中或者通过使用像https://securityheaders.io这样的站点看到这个HTTP头。通过使用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(如果设置不正确)。此外,框架很可怕,不应该再使用:-)

cx6n0qe3

cx6n0qe32#

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

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

确保apache mod_rewrite已启用。

polhcujo

polhcujo3#

基本上,任何浏览器都不应接受来自HTTPS请求的指示目标重定向到HTTP的a * 任何**HTTP 301响应,这样做的服务器显然违反了基本安全性,或者受到严重损害。但是,对HTTPS请求的301响应仍然可以重定向到另一个HTTPS目标(包括在另一个域上,前提是满足其他CORS要求)。
如果您浏览HTTPS链接(或javascript事件处理程序),并且浏览器开始加载该HTTPS目标,该目标回复301重定向到HTTP,则浏览器的行为应该类似于500服务器错误或连接失败(DNS名称未解析,服务器未响应超时)。
这样的服务器端重定向显然是无效的。网站管理员永远不应该这样做!如果他们想关闭一个服务,并通知HTTPS用户,该服务是托管在其他地方,不再安全,他们必须返回一个有效的HTTPS响应页面,没有重定向在所有,这应该是一个4xx错误页(很可能404页面未找到),他们不应该重定向到另一个HTTPS服务(例如,第三方托管搜索引擎或停车页面),不符合CORS要求,或发送错误的媒体类型(不荣誉请求的语言并以另一种语言显示该页面是可以接受的)。
实现HSTS的浏览器是完全正确的,并且朝着正确的方向发展。但我真的认为CORS规范是一团糟,只是调整了一下,仍然允许广告网络托管和控制自己向其他网站广播的广告。
我强烈认为,那些出于正当理由仍然希望显示广告(或任何用于受众测量的追踪器)的严肃网站可以在自己的域名上以相同的协议自己托管这些广告/追踪器:服务器仍然可以通过下载/刷新这些广告并维护自己的本地缓存来获得自己想要广播的广告内容。如果他们希望第三方分析这些数据,他们可以通过收集他们需要和想要的数据并在自己的服务器上过滤这些数据来跟踪他们的受众:网站必须认真执行自己的隐私要求。
我现在讨厌那些太多的网站,当访问时,被数十个第三方跟踪,包括非常侵入性的像Facebook和大多数广告网络,加上许多非常薄弱的第三方服务,有非常差的质量/安全性,并发送非常糟糕的内容,他们从来没有控制(包括虚假广告,假新闻,促进非法活动,非法企业,无效的年龄评级...)。
让我们回到网络的起源:一个网站,一个域名,一个第三方。这并不意味着他们不能链接到其他第三方网站,但这些必须只做一个明确的用户操作(点击或点击),访问者必须能够知道wherre这将去,或哪些内容将被显示。
这甚至可以用于在新闻文章中插入视频(例如Youtube):新闻网站可以为自己提供用于该框架的静态图像和用于“播放”按钮的图标的高速缓存:当用户点击该图标时,它将开始激活第三方视频,在这种情况下,第三方将直接与该用户交互,并收集其他数据。2但未激活的内容将仅由源网站根据其发布的政策进行跟踪。

cs7cruho

cs7cruho4#

在我的本地开发环境中,我使用Apache服务器。对我有效的是:在sites-availabe/yoursite.conf中打开配置文件,然后在虚拟主机中添加以下行:Header always set Strict-Transport-Security "max-age=0"。重新启动服务器。

piok6c0g

piok6c0g5#

如果您使用的是节点服务器,请在app.tsx中更改HelmetJS
删除-

app.use(helmet())

使用-

app.use(
        helmet.contentSecurityPolicy({
            directives: {
                defaultSrc: ["'self' *"],
                upgradeInsecureRequests: null,
            },
        }),
    )

或使用-

app.use(
        helmet.hsts({
            maxAge: 0,
        }),
    )

相关问题