【发布时间】:2010-07-19 19:43:40
【问题描述】:
如何检测客户端浏览器是否支持 SSL?我不是指 到服务器变量 HTTPS_* 。我希望能够确定 如果浏览器不支持 SSL。
附:我知道这是可能的,因为这家公司 (http://www.cyscape.com) 有一款产品甚至可以检测您何时从您的设备中取消选择 SSL 支持 浏览器选项。
【问题讨论】:
标签: c# javascript security encryption ssl
如何检测客户端浏览器是否支持 SSL?我不是指 到服务器变量 HTTPS_* 。我希望能够确定 如果浏览器不支持 SSL。
附:我知道这是可能的,因为这家公司 (http://www.cyscape.com) 有一款产品甚至可以检测您何时从您的设备中取消选择 SSL 支持 浏览器选项。
【问题讨论】:
标签: c# javascript security encryption ssl
所有浏览器都支持 SSL(句号)。没有人会发布一款无法使用的浏览器。 HTTPS 是一项安全要求,属于 OWASP A3:损坏的身份验证和会话管理的一部分。
【讨论】:
虽然检查服务器是否支持 SSL 连接相对容易,但检测浏览器是否支持 SSL 连接却非常困难。该解决方案可能需要一个客户端浏览器扩展,该扩展实现通过浏览器配置或版本信息搜索 SSL 支持所需的逻辑。这个问题变得更加困难,因为扩展需要与多个浏览器一起工作。
如果您没有访问者无法通过 SSL 连接到特定页面,您通常可以使用服务器端方法,例如将他们重定向到一个登录页面,在那里他们会收到 SSL 要求的通知,或者您可以简单地拒绝他们的网络请求。
【讨论】:
如前所述,现代网络浏览器没有理由默认禁用 SSL。
在 SSL 级别,当您向浏览器提供 https 链接时,您的服务器是否会收到连接?
在 HTTP 级别,您可以尝试各种方案,通过 HTTP 分配会话 cookie,然后通过只能通过 HTTPS 访问的链接更新一些会话变量。或者您可以在 cookie 上设置“安全”属性,然后查看浏览器如何处理它。
您可以尝试使用 JavaScript 方法并检查 window.location 属性,或者尝试将其设置为 https 链接。 (或者使用 LiveConnect 尝试一些 Java 功能或使用 Flash 做类似的事情。)
这个问题有什么特别的动机吗?如果您尝试确定由于某些奇怪的原因没有启用 SSL 的浏览器的 SSL 支持,那么 cookie 或 JavaScript 方法应该没问题。如果您尝试确定对抗性浏览器的 SSL 支持(例如不遵循 robots.txt 的机器人),或者您有更多理由不信任 JavaScript 等客户端检查,那么检查 SSL 可能没有用解决方案,否则您可能需要更深入地了解 SSL 握手是否与普通浏览器不同。
【讨论】:
检查客户端是否支持 SSL 将受到中间人攻击,在这种攻击中,活跃的网络攻击者可以控制用户的连接并使其看起来好像客户端不支持 SSL。
在开发针对可能不支持真正 SSL(它们支持 WAP-TLS)的旧手机的移动网站时,最常被问到这个问题。此类手机的数量继续减少,我的建议是忽略它们,甚至可能将其用户代理列入黑名单。
【讨论】: