我有一个处理信用卡处理的PHP文件。它以表格形式输入信用卡号,然后成为“确认”屏幕(显示信用卡号),然后再一次处理并显示结果。所有三个加载都将通过PHP提交完成(我意识到确认可能更好,因为Javascript,但我没有写它)。它是目录中处理信用卡的唯一文件,因此它是唯一需要httpS连接的文件。
我尝试使用$ _SERVER数组强制执行此操作,查找用于从SCRIPT_URI(或其他条目)的前缀进行连接的协议,但没有一个具有前缀。
使用同一目录中的.htaccess文件有一种简单的方法吗?如何仅针对一个文件强制执行该操作?如果还有其他简单方法,我该怎么做?
很抱歉这些问题,但到目前为止我的搜索还没有发现一个有效的解决方案,我担心我不知道最佳做法是什么。
谢谢!
答案 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则发出重定向并终止。