使用HTTPS替代HTTP

3
我有一个需要用户登录的网站。我想使用HTTPS来建立安全加密连接到服务器,以检查用户名和密码。 目前在我的服务器上有一个名为httpdocs的文件夹,这是我的网站存储位置,我还有一个名为httpsdocs的文件夹。 现在,正如我所说,我的网站存储在httpdocs中,因此从逻辑上讲,我会去http://website.com。 但是我发现,如果我转到https://website.com,我可以安全地连接到存储在httpdocs中的页面。 无论如何,我的问题是,每当我转到另一个链接时,我就会失去安全连接(URL返回到http://)。那么,如何保持所有内容的安全?我是否需要在href中使用完整的URL,因为似乎使用href = page2.php有点不好。 我是网站开发领域的新手,但我有开发经验,如果那能帮到你的话。 非常感谢您的帮助。 如果有人知道基础教程或阅读资料,那将是很棒的。 再次感谢。

1
你可能在网站(无论是用什么语言编写的)中使用绝对 URL 或使用一个变量来保存你的网站的“基本 URL”。为了得到更好的答案,你需要发布一些代码/HTML或可能是你网站的链接。 - Prisoner
我没有绝对URL,我会避免使用它。这是我的问题,如果我使用绝对路径例如https://mysite.com/page3.php,那将是安全的,但我不知道如何使用相对链接。是否有服务器端可以更改的内容,像值之类的东西?我在我的服务器上使用CentOS。 - ragebunny
1
不,使用 href="page3.php" 将使用您当前所在的协议 - 这可能是 .htaccess 的问题吗? - Prisoner
好的,我已经成功让它保持在协议中了......有人认为他们应该使用绝对URL(我讨厌接手别人的工作)。仍然不知道如何设置网站,以便在只输入域名时打开https。非常感谢您的帮助。 - ragebunny
请看我对你的问题的回答。 - Prisoner
使用重定向来解决此问题并不安全 - 请参见@Prisoner的答案下的我的评论 - 您必须首先消除第一次出现的HTTP链接。您能否解释一下传递给浏览器的HTML中链接的样子?您是否使用某些内容管理系统在幕后重写URL?出于安全(甚至性能)原因,如果这是解决问题的唯一方法,我建议使用完整的https://链接而不是使用重定向hack。 - rsp
3个回答

2

在URL中不要使用http://foo.com/path,而是使用//foo.com/path(甚至更好的方法是,如果你在同一台服务器上,请使用/path - 这肯定有效)。使用完整的URL会带来冗余和脆弱性。尽量避免。


2
为了回答你在评论中的问题,你应该使用mod_rewrite(假设它已经启用):
RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.yourdomain.com/$1 [R,L]

这将把任何网页发送到https。


这不是一个安全的解决方案,因为如果每个链接都使用不安全的HTTP访问,然后重定向到安全的HTTPS,那么在每次点击和重定向之间,您都容易受到几乎与所有通信都在HTTP中完成时相同的攻击。具体来说,可能会发生中间人攻击,发送其他内容而不是重定向,或者会话劫持或窃听使用cookie、查询参数或post数据发送的敏感数据。正确的解决方案是首先消除HTTP流量。 - rsp
我不确定怎么做? @rsp - ragebunny

0

了解HTTP严格传输安全(HSTS)https://www.owasp.org/index.php/HTTP_Strict_Transport_Security

基本上,您可以通过将此标头添加到安全站点的配置中来强制浏览器(除非是IE<12)始终使用HTTPS:

Header set Strict-Transport-Security "max-age=31536000; includeSubDomains"

这也可以与301(永久)重定向结合使用,用于非安全/HTTP站点的配置,也可以在上述引用站点中outlined

此外/或者,您可以通过在<head>标记顶部添加类似以下内容来设置"website.com"页面的base href

<base href="https://website.com/">

这将设置页面上所有相对URL(包括链接、样式表、脚本、图像等)以HTTPS站点的根目录作为它们的基础。但是,根据您的网站结构和大小,您需要验证每个页面的基本href和/或页面内的URL是否包含任何必要的路径信息(即子目录)。否则,指向“otherpage.html”的http://website.com/some/directory/page.html链接将指向http://website.com/otherpage.html而不是http://website.com/some/directory/otherpage.html。在这种情况下,您需要一个基本href为“http://website.com/some/directory/”或链接中的相对URL应该指向“/some/directory/page.html”或“some/directory/page.html”(在这种情况下不需要斜杠)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接