我只有一个页面,我想强制作为HTTPS页面访问(Apache上的PHP).如何在不使整个目录需要HTTPS的情况下执行此操作?或者,如果您从HTTP页面向HTTPS页面提交表单,它是通过HTTPS而不是HTTP发送的吗?
这是我的例子:
http://www.example.com/some-page.php
Run Code Online (Sandbox Code Playgroud)
我希望它只能通过以下方式访问:
https://www.example.com/some-page.php
Run Code Online (Sandbox Code Playgroud)
当然,我可以把这个页面的所有链接指向HTTPS版本,但这并不能阻止一些傻瓜故意通过HTTP访问它...
我想到的一件事是在PHP文件的标题中放置一个重定向来检查以确保它们正在访问HTTPS版本:
if($_SERVER["SCRIPT_URI"] == "http://www.example.com/some-page.php"){
header('Location: https://www.example.com/some-page.php');
}
Run Code Online (Sandbox Code Playgroud)
但这不是正确的方法,可以吗?
顺便说一句,请不要注意URL.我知道如果它实际上是一个有购物车等的页面,你会以不同的方式做到这一点.您可以将其视为一个网站,该网站以一个价格销售一件商品,您可以在其中输入您的信用卡信息,然后将其提交到外部网站上的支付网关,以便明确向您的卡收费一次.
Ada*_*eld 172
我以前做过的方式基本上就像你写的那样,但没有任何硬编码的值:
if($_SERVER["HTTPS"] != "on") { header("Location: https://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]); exit(); }
the*_*gjc 45
您可以在Apache上使用指令和mod_rewrite来执行此操作:
<Location /buyCrap.php>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</Location>
Run Code Online (Sandbox Code Playgroud)
如果需要,您可以使用正则表达式使位置更智能.
Jac*_*ood 36
您应该强制客户端始终使用HTTP严格传输安全性(HSTS)标头请求HTTPS :
// Use HTTP Strict Transport Security to force client to use secure connections only
$use_sts = true;
// iis sets HTTPS to 'off' for non-SSL requests
if ($use_sts && isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') {
header('Strict-Transport-Security: max-age=31536000');
} elseif ($use_sts) {
header('Location: https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'], true, 301);
// we are in cleartext at the moment, prevent further execution and output
die();
}
Run Code Online (Sandbox Code Playgroud)
请注意,HSTS在大多数现代浏览器中都受支持,但不是通用的.因此,上述逻辑手动重定向用户,无论支持是否最终都在HTTP上,然后设置HSTS头,以便在可能的情况下应由浏览器重定向其他客户端请求.
小智 17
我刚刚创建了一个.htaccess文件并添加了:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Run Code Online (Sandbox Code Playgroud)
简单!
小智 9
// Force HTTPS for security
if($_SERVER["HTTPS"] != "on") {
$pageURL = "Location: https://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
}
header($pageURL);
}
Run Code Online (Sandbox Code Playgroud)
在负载均衡器后面运行时,不得不做这样的事情.帽子提示/sf/answers/1125387581/
function isSecure() {
return (
(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
|| $_SERVER['SERVER_PORT'] == 443
|| (
(!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
|| (!empty($_SERVER['HTTP_X_FORWARDED_SSL']) && $_SERVER['HTTP_X_FORWARDED_SSL'] == 'on')
)
);
}
function requireHTTPS() {
if (!isSecure()) {
header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], TRUE, 301);
exit;
}
}
Run Code Online (Sandbox Code Playgroud)
http://www.besthostratings.com/articles/force-ssl-htaccess.html
有时您可能需要确保用户通过安全连接浏览您的站点.使用包含以下行的.htaccess文件可以轻松地将用户重定向到安全连接(https://).
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
Run Code Online (Sandbox Code Playgroud)
请注意,.htaccess应位于网站主文件夹中.
如果您希望为特定文件夹强制使用HTTPS,您可以使用:
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} somefolder
RewriteRule ^(.*)$ https://www.domain.com/somefolder/$1 [R,L]
Run Code Online (Sandbox Code Playgroud)
.htaccess文件应放在您需要强制HTTPS的文件夹中.
好的..现在这里有很多东西,但没有人真正完成"安全"问题.对我来说,使用不安全的东西是荒谬的.
除非你用它作诱饵.
$ _SERVER传播可以根据知道方法的人的意愿进行更改.
同样,Sazzad Tushar Khan和thebigjc表示你也可以使用httaccess来做这个,这里有很多答案包含它.
只需添加:
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://example.com/$1 [R,L]
Run Code Online (Sandbox Code Playgroud)
到你的.httaccess所拥有的就结束了那就是那个.
我们仍然不如使用这两种工具那样安全.
其余的很简单.如果缺少属性,即......
if(empty($_SERVER["HTTPS"])){ // SOMETHING IS FISHY
}
if(strstr($_SERVER['HTTP_HOST'],"mywebsite.com") === FALSE){// Something is FISHY
}
Run Code Online (Sandbox Code Playgroud)
还要说你已经更新了你的httaccess文件并检查:
if($_SERVER["HTTPS"] !== "on"){// Something is fishy
}
Run Code Online (Sandbox Code Playgroud)
你可以检查更多变量,即...
HOST_URI
(如果有静态属性要检查)
HTTP_USER_AGENT
(相同会话的不同值)
因此,当答案在一个组合中时,我所说的一切都不会只是满足于一个或另一个.
有关更多httaccess重写信息,请参阅docs-> http://httpd.apache.org/docs/2.0/misc/rewriteguide.html
此处的一些堆栈 - > 使用.htaccess和mod_rewrite强制SSL/https
并
获取完整的URL当前页面(PHP)
来命名一对.
小智 5
PHP方式:
$is_https=false;
if (isset($_SERVER['HTTPS'])) $is_https=$_SERVER['HTTPS'];
if ($is_https !== "on")
{
header("Location: https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
exit(1);
}
Run Code Online (Sandbox Code Playgroud)
Apache mod_rewrite方式:
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
164054 次 |
最近记录: |