通过HTTP强制HTTPS

时间:2012-10-28 16:25:48

标签: security .htaccess http https rewrite

所以我想强制用户访问我的页面的https版本而不是http。根据{{​​3}}帖子,我所要做的就是:

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

MY 网站位于主目录中的文件夹中,因此位于www.domain.com/Folder。所以这个htaccess代码应该放在主目录或子目录中。因为我不想改变访问主站点的方式,只有文件夹。

4 个答案:

答案 0 :(得分:2)

这是一个不太好的方法,特别是如果你有权访问httpd.conf。更好的方法是创建 TWO 虚拟主机。一个用于标准端口80的东西,它只是无条件地重定向到SSL版本,例如在伪ish .conf谈话:

<VirtualHost example.com:80>
   RedirectPermanent / https://example.com
   DocumentRoot /some/fake/path
</VirtualHost>

<VirtualHost example.com:443>
   normal site stuff here...
</VirtualHost>

这样做的好处是,即使配置消息禁用.htaccess文件,也可以保留重定向的可行性,如果SSL因任何原因死亡,还可以提供伪造/不存在的内容。

答案 1 :(得分:1)

您可以将其保留在根目录中,但将其更改为:

RewriteRule ^(your-directory/.*)$ https://www.yourdomain.com/$1 [R,L]

请记住,在重定向发生之前,可能已经以明文形式发送了包含可能敏感数据的Cookie和查询参数,因此如果您使用Cookie,请记得使用secure cookie atribute

答案 2 :(得分:0)

如果您从http重定向到https,您的网站可能会受到攻击。看看这个有关它的更多信息。

http://www.thoughtcrime.org/software/sslstrip/

答案 3 :(得分:0)

“强制ssl”似乎很愚蠢,直到他们修复了它在浏览器中以“网站验证”的名义打开的巨大安全漏洞 这没有真正的基础,并且有可能被流氓CA,流氓国家或腐败滥用。 (并且“验证”无论如何都不是基于用户的意愿而不是任何人实际查看网站 - 有很多网络钓鱼网站有“有效”证书!)

有关SSL的错误信息太多了

您使用自签名证书获得相同加密,但浏览器会告诉用户您的网站是“不受信任的”(当然没有基础 - “未检查”或“不可验证”将是什么警告实际上应该说 - 警告需要提供信息,而不是只是吓唬用户的东西,大多数人只是关闭它们,甚至没有阅读其余的警告!)

在浏览器中修复此问题之前,我不建议在网站环境中使用SSL。

同时我可以建议忘记端口443并实现自己的加密层(或者如果它不需要是浏览器则使用类似ssh的东西)