gpt4 book ai didi

php - 将某些访问者重定向到 https(SNI 浏览器和系统时间都可以)

转载 作者:太空宇宙 更新时间:2023-11-03 13:37:56 24 4
gpt4 key购买 nike

我查了很多关于检查SNI浏览器支持部分的帖子,但是没有结合系统时间。

我网站的默认登陆是http。现在我已经设置了 SSL。但兼容性对我来说最重要。安全是最不重要的。我只想将用户自动重定向到 https,如果我非常确定他们不会看到错误(然后错误地认为我的网站坏了)。

由于着陆页是HTTP的,我们可以使用php或者.htacess来检测。我曾在其他地方看到过关于使用 php 重定向的讨论,这可能会导致一些“后退”按钮问题。 ( Force SSL and handle browsers without SNI support )

除了 SNI 支持,我还知道如果用户配置了错误的系统时间,他可能会在 https 站点上遇到错误。

那么同时实现 SNI + 系统时间检查的最佳方法是什么?用户被重定向到 https 的任何其他可能遇到错误的情况?

============================================= ======================

更新:

加载主页并不真正需要“安全”。我在想我是否可以做一个快速检查,看看用户是否可以成功加载一个对象,例如https://example.com/test.ico ,如果是,则显示“安全登录”选项。 (向史蒂芬致敬)。然后将在 https 中完成发布操作,以防止不安全地提交凭据。

如果 https 测试失败,则用户别无选择,必须在没有 https 的情况下登录。

  1. 这行得通吗?
  2. 额外的测试肯定会拖累网站加载速度,不是吗

最佳答案

无法使用 PHP 或 .htaccess 在服务器端检测到这一点,因为如果由于缺少 SNI 或错误的系统时间导致连接失败,那么它在 SSL 握手期间就已经失败了。但是 PHP 部分或 .htaccess 仅用于 HTTP 部分,即仅当 SSL 握手成功完成时。

您可能会尝试将 https 资源包含到您的着陆页中,然后查看是否成功加载。这可以通过图像、css、XHR 或类似的方式来完成。例如你可以这样做

<img src="https://test-ssl.example.com" 
onload="redirect_to_https();"
onerror="notify_user_about_problem();" />

如果与您站点的 SSL 连接成功建立,则 onload 处理程序将被执行,用户将被重定向到 https 站点。相反,如果握手失败,用户会收到有关该问题的通知。

请注意,您无法通过这种方式区分不同类型的错误,即您不知道问题是由错误的系统时间还是缺少 SNI 支持引起的。如果你想这样做,你需要以同样的方式包含一个非 SNI 资源,并查看它是否被成功加载。

But compatibility is most important to me. Security is least important.

我认为这是一种糟糕但不幸的是非常普遍的方法。我建议您改为使用此机制,不允许用户仅使用 http 访问您网站的所有功能,但敏感部分应限制为 https。但是您可以使用这种方法详细告知用户问题并显示备选方案,而不是仅仅因为 SSL 握手失败而导致一些奇怪的连接错误。

关于php - 将某些访问者重定向到 https(SNI 浏览器和系统时间都可以),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33844677/

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