假设非https这样安全吗?

时间:2016-08-07 12:17:31

标签: .htaccess https http-redirect

在我的.htaccess文件中,我创建了以下规则,以确保它始终是HTTPS:

# Redirect To HTTPS...
RewriteCond %{SERVER_PORT} !=443
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]

是否可以安全地假设443以外的每个端口都应重定向到HTTPS?是否还应在特定场合允许其他端口?我希望我的网站永远不会被解密。

4 个答案:

答案 0 :(得分:2)

将以下规则添加到.htaccess中,它会使强制https独立于端口,并将所有http流量重定向到https。

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On

RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

答案 1 :(得分:1)

根据RFC文档http://www.rfc-editor.org/rfc/rfc2616.txt,端口80和443是HTTP / HTTPS的默认端口。因此浏览器将自动使用这些端口连接这些协议。如果不是80/443,则需要向浏览器提供端口号。

因此,除非您有理由从非标准端口提供服务,否则您可以从端口80重定向到443.您已经知道如果您开始使用另一个端口进行HTTP连接或者同样使用catch all all redirect to 443使用端口80重定向然后添加更多端口进行服务将不会重定向。

根据您的要求,有很多方法可以编写重定向。

端口80重定向的示例:

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

答案 2 :(得分:1)

除非明确要求,浏览器才会连接到端口80(如果指定了https,则为443)。您的Web服务器应该只监听端口80和443,因此您只需要重定向端口80。

如果您希望始终提供https,那么您应该添加HSTS并预加载您的网站:

https://developer.mozilla.org/en-US/docs/Web/Security/HTTP_strict_transport_security

https://hstspreload.appspot.com/

HSTS是一个标题,告诉浏览器只能连接到https,而不是http,但它只能在第一次成功连接后才能工作(因此第一个连接可能不安全)。如果你预加载它,那么浏览器知道你的网站甚至在第一次访问之前只使用https,所以它也可以保护它。

答案 3 :(得分:1)

如果您可以控制Apache配置并关注性能匹配,则无需使用.htaccessmod_rewrite。这样可以避免为每个Web请求加载和解析.htaccess

只需在虚拟主机配置中使用这个简单的Redirect指令:

<VirtualHost *:80>
    ServerName www.example.com
    Redirect "/" "https://www.example.com/"
</VirtualHost>

详细了解:when not to use mod_rewrite