2

我的网络服务器上安装了一个证书。如果我只想通过 ssl 访问一个页面,我需要在页面上标记什么,或者在其他地方设置另一个设置?

4

4 回答 4

2

这是一个如何在 PHP 中执行此操作的示例

if($_SERVER['SERVER_PORT'] != 443) {
   header("Location: https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
   exit;
}

在这里如何在 JavaScript 中做到这一点:

<script type="text/javascript">
    if (window.location.protocol != 'https:') {
        window.location.href = 'https://' + window.location.host + window.location.pathname;
    }
</script>

要仅使用 HTML,您可以执行以下操作:

<meta http-equiv="refresh" content="0;url=https://www.yoursite.com" /> 

我相信您也可以直接在 Apache 配置中执行此操作。

于 2012-10-21T00:02:26.400 回答
2

简而言之,唯一可靠的方法是仅使用https://URL 链接到它。理想情况下,您应该确保您的用户期望使用 HTTPS,并且他们会检查它是否正确使用(即他们不会忽略浏览器警告)。

在普通 HTTP 请求之后在服务器上强制执行的任何操作都可能容易受到 MITM 攻击。这包括重定向方法mod_rewrite,PHP 标头(Location标头),JavaScript(提取window.location),...,当然还有https://链接本身的初始传递,如果它是从通过普通 HTTP 提供的页面获得的。即使是由于类似的原因而拒绝访问SSLRequireSSL也只有在收到纯 HTTP 请求后才有效。

使用这些重定向技术并不是一个坏主意,如果只是为了让您的用户习惯他们使用 HTTPS 的事实(如果在其他情况下他们不是,他们可能会注意到一些奇怪的东西,这可能表明 MITM 攻击),他们至少应该保护他们免受被动窃听攻击。

更一般地说,即使您使用相同的主机名(可能是相同的服务器软件)提供服务http://www.example.comhttps://www.example.com它们在技术上也是两个不同的主机(例如 Apache Httpd 术语中的虚拟主机),并且托管在一个主机上的资源不需要托管在其他。只需不要在纯 HTTP 主机上通过 HTTPS 提供您只需要的页面。我还建议不要使用重定向(至少在开发阶段),这样当您不使用 HTTPS 链接到这些页面时它会中断:这将有助于检测潜在的混合内容问题。自动重定向主要对直接在浏览器中输入地址的用户有用。

您可以考虑将您的网站放入预加载的HTTP 严格传输安全列表(或至少使用 HSTS,这将使浏览器记住仅在至少工作一次后才使用 HTTPS),但这将适用于整个主机.

您可以在Security.SEWebmasters.SE上的这些答案中找到更多详细信息。

于 2012-10-21T23:34:00.463 回答
0

如果服务器配置正确,您只需使用 https:// 链接到该页面即可。

要检查并确保在没有 https 的情况下无法访问该页面,您可以使用 php 查找当前的确切 URL 并检查其是否为 https,如果不是,则执行简单的重定向到 https://[URL]

于 2012-10-20T23:26:27.100 回答
0

如果服务器配置正确,则无需在页面指向它的链接上放置任何内容。只需在 Apache 配置中使用 SSLRequireSSL 指令为页面定义一个 Location 块。

于 2012-10-21T23:33:46.600 回答