如何在单个文件上强制使用HTTPS? (PHP)

时间:2012-02-11 19:11:29

标签: php .htaccess ssl https

我有一个处理信用卡处理的PHP文件。它以表格形式输入信用卡号,然后成为“确认”屏幕(显示信用卡号),然后再一次处理并显示结果。所有三个加载都将通过PHP提交完成(我意识到确认可能更好,因为Javascript,但我没有写它)。它是目录中处理信用卡的唯一文件,因此它是唯一需要httpS连接的文件。

我尝试使用$ _SERVER数组强制执行此操作,查找用于从SCRIPT_URI(或其他条目)的前缀进行连接的协议,但没有一个具有前缀。

使用同一目录中的.htaccess文件有一种简单的方法吗?如何仅针对一个文件强制执行该操作?如果还有其他简单方法,我该怎么做?

很抱歉这些问题,但到目前为止我的搜索还没有发现一个有效的解决方案,我担心我不知道最佳做法是什么。

谢谢!

3 个答案:

答案 0 :(得分:9)

在完成所有信用卡处理的PHP页面的开头,您可以添加:

它将重定向回自身,但如果首次加载https,则使用http。当然,您仍需要为您的域安装SSL证书。

if (!isset($_SERVER['HTTPS']) || !$_SERVER['HTTPS']) { // if request is not secure, redirect to secure url
    $url = 'https://' . $_SERVER['HTTP_HOST']
                      . $_SERVER['REQUEST_URI'];

    header('Location: ' . $url);
    exit;
}

我在PHP中使用相同的逻辑来保护我的整个域,方法是将其放在始终在每个网站请求开始时调用的文件中。

答案 1 :(得分:2)

将以下代码放在文件夹中的.htacces文件中:

RewriteEngine On
RewriteCond %{SERVER_PORT} !443
RewriteRule (.*) https://www.example.com/require-secure/ [R]

如果端口不是443(443用于HTTPS)并重定向到https://www.example.com/require-secure/,则会触发。

注意:需要mod_rewrite但主要是

答案 2 :(得分:2)

首先,您为什么要有目的地使您的所有网站都使用不安全的协议?你真的有这么紧张的性能预算,你不能忍受TLS的开销吗?过早优化是人类的祸根。

另外,说信用卡处理脚本是唯一需要HTTPS的脚本,这意味着您的用户登录系统正在以明文形式发送密码。这不仅仅是表现贪婪,而是完全糟糕的设计。

除此之外,正确的解决方案是使用mod_rewrite强制重定向到该链接的HTTPS。如果您根本无法操作服务器配置(甚至通过.htaccess),另一种解决方案是让您的PHP脚本首先检查协议,如果不是HTTPS则发出重定向并终止。