我一直在尝试在我的osCommerce网站上强制HTTPS,它很有效。但当它切换到HTTPS时,会话中断,登录根本不起作用。
用于强制HTTP的.htaccess代码
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
在osCommerce网站中的所有页面上强制HTTPS的方法是使用配置中已经为您设置的内容,而不是让.htaccess来完成这项工作。
编辑includes/configure.php文件,并将您网站的HTTPS版本放在以下两个文件中:
define('HTTP_SERVER', 'https://example.com');
define('HTTPS_SERVER', 'https://example.com');
您肯定在使用Apache吗?
请在您的.htaccess
中尝试此操作。。。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
我不确定这是否与您的问题直接相关,但我建议确保您网站内的所有表单、链接和Location
标头都指向使用https
前缀的URL,如果这些是绝对的话。
将HTTP请求转换为HTTPS的重写规则只对保护"入口点"(用户访问的第一个页面)非常有用。如果数据发送到使用http://
的URL,则不会阻止数据以明文形式发送。事实上,这些重写规则只有在浏览器首先以明文形式发出请求后才会生效(因此,所有标头,包括登录cookie,除非安全cookie和所有POSTed数据,例如,都将以明文形式发送)。
您可能对以下相关问题感兴趣:
- 如何将所有HTTP请求重定向到HTTPS
- Tomcat会话管理-url重写和从http到https的切换
会话有可能中断,因为过程中有一个看似不可见的纯HTTP连接,这可能会导致一些与会话相关的数据无法正确传输。如果您使用的是Firefox,打开security.warn_leaving_secure
选项(通过about:config
URL)来跟踪这类问题可能会很有用。
在
/includs/configure.php中将HTTP域修改为具有
https://这将使所有会话仅保留https。在
/admin/includs/configure.php中执行相同操作它建立在你应该做的mod_rewrite的其他答案的基础上。
我还将添加HTTP STRICT TRANSPORT SECURITY标头和XSS保护。
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header unset X-Powered-By
Header unset Server
Header set X-Content-Type-Options "nosniff"
Header set X-XSS-Protection "1; mode=block"
<FilesMatch "'.(appcache|atom|bbaw|bmp|crx|css|cur|eot|f4[abpv]|flv|geojson|gif|htc|ico|jpe?g|js|json(ld)?|m4[av]|manifest|map|mp4|oex|og[agv]|opus|otf|pdf|png|rdf|rss|safariextz|svgz?|swf|topojson|tt[cf]|txt|vcard|vcf|vtt|webapp|web[mp]|woff2?|xloc|xml|xpi)$">
Header unset X-XSS-Protection
</FilesMatch>
</ifModule>