使用PHP检测SSL

Phi*_*lip 26 php ssl https

可能重复:
如果您在没有$ _SERVER ['HTTPS']的情况下使用HTTPS,如何找出

我去网上寻找检测服务器是否使用HTTPS连接的方法,但没有一个网站似乎有所有答案(以及一些不同的答案).究竟是什么方法来检测服务器是否正在使用与PHP的HTTPS连接?我需要知道几种检测SSL的方法,因为我的一些脚本被重新分配,各种服务器处理不同的事情.

dec*_*eze 77

$_SERVER['HTTPS']

如果通过HTTPS协议查询脚本,则设置为非空值.
注意:请注意,将ISAPI与IIS一起使用时,如果请求不是通过HTTPS协议进行的,则该值将关闭.

http://www.php.net/manual/en/reserved.variables.server.php

因此,这样做:

if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') {
    // SSL connection
}
Run Code Online (Sandbox Code Playgroud)

  • 在正确行为的服务器上"会做";-)当然,如果服务器配置错误,那么所有赌注都已经关闭.+1. (2认同)

yoa*_*avf 16

WordPress的核心is_ssl()函数还添加了对服务器端口的检查:

function is_ssl() {
    if ( isset($_SERVER['HTTPS']) ) {
        if ( 'on' == strtolower($_SERVER['HTTPS']) )
            return true;
        if ( '1' == $_SERVER['HTTPS'] )
            return true;
    } elseif ( isset($_SERVER['SERVER_PORT']) && ( '443' == $_SERVER['SERVER_PORT'] ) ) {
        return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

  • 不是端口443必然意味着连接是SSL加密的...... :) (7认同)
  • 对于像Cloudflare这样的反向代理的@rorypicko你应该检查标题`X-Forwarded-Proto`,如果浏览器用HTTPS连接到CF,应该设置为`https`.有时使用的另一个标题是"Front-End-Https:on",特别是对于MS软件 (4认同)
  • 我使用提供SSL的第三方CDN服务CloudFlare.但是只有与CloudFlare的连接是安全的,当CloudFlare联系我们的服务器时它是不安全的.所以在测试这段代码时请注意那个......哈哈 (2认同)