假设我有一个网站,称为它www.yoyodyne.com
,它同时包含“不安全”和“安全”内容:
- 不安全的内容不包含任何秘密,任何网站用户都可以通过 HTTP 访问。
- 安全内容包含客户机密,只能由经过身份验证的授权用户通过 HTTPS 访问。访问安全内容时,Web 客户端既可以从网站接收机密,也可以向网站发送机密。
让我们进一步说,www.yoyodyne.com
由 Apache 提供服务,并且我尝试通过断言SSLRequireSSL
包含安全内容的位置的指令来确保访问安全(双向)。
现在,最后,假设 Web 客户端通过 HTTP 而不是 HTTPS 发送包含客户机密的请求,因为不知何故(见下文)它获取了一个 URL,其路径名组件引用安全内容,但其方案(协议)组件是错误地设置为http
而不是https
.
问题 1:鉴于 Apache 服务器侦听www.yoyodyne.com
的 IP 地址的 80 和 443 端口(以便能够同时提供不安全和安全的内容),即使该SSLRequireSSL
指令最终导致客户的秘密不会泄露请求被拒绝?
问题 2:如果我们假设客户端总是有可能收到并使用上述类型的错误 URL,如果我被限制使用单个域名/IP,有什么方法可以防止这种泄漏网站地址?(很明显,如果我只提供来自 的安全内容,我可以避免这个问题secure.yoyodyne.com
,它解析为与 不同的 IP 地址www.yoyodyne.com
,并且没有人在端口 80 上监听。但如果 的所有者www.yoyodyne.com
便宜且不不想为第二个 IP 地址和/或出于美学原因的对象付费,我受制于约束。)
--
现在,在 的情况下www.yoyodyne.com
,Web 客户端至少可以通过两种方式获取上述类型的错误 URL:
- 网站本身代码中的错误导致其将链接嵌入到它所服务的页面中;
- 许多“合作伙伴”网站中的任何一个,每个网站都代表 对用户进行身份验证,
www.yoyodyne.com
通过 iframe 提供链接。
显然,所有这些网站的开发人员和维护人员有责任确保他们不编写此类不良链接。但同样明显的是,不能保证。(虽然通过执行良好的编码标准和 QA 实践,我可能对他们的行为有一定程度的保证www.yoyodyne.com
,但我无法有效控制合作伙伴网站的开发人员如何经营他们的商店。)
所以:
问题 3:假设(如上所述)我没有单独的secure.yoyodyne.com
站点(以完全防止通过 HTTP 传输任何此类不良请求),我可以部署的最简单、最有效的机制是什么,www.yoyodyne.com
以尽快通知管理员在提出如此糟糕的要求之后?(在我的脑海中,我想象着像 Nagios 监控服务器日志并在看到如此糟糕的访问时发送警报,但很可能有一种我没有想到的更简单的方法。)