社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  NGINX

【nginx&php】后台权限认证方式

PHP开源社区 • 6 年前 • 674 次点击  
阅读 10

【nginx&php】后台权限认证方式

一、最常用的方法(代码中限制)

1、如何限制IP

function get_new_ip(){
    if(getenv('HTTP_CLIENT_IP')) {
        $onlineip = getenv('HTTP_CLIENT_IP');
    } elseif(getenv('HTTP_X_FORWARDED_FOR')) {
        $onlineip = getenv('HTTP_X_FORWARDED_FOR');
    } elseif(getenv('REMOTE_ADDR')) {
       $onlineip = getenv('REMOTE_ADDR');
    } else {
       $onlineip = $HTTP_SERVER_VARS['REMOTE_ADDR'];
    }   
    return $onlineip;
}
 
$onlineip = get_new_ip();
$wip = ['127.0.0.1'];
 
if(!in_array($onlineip, $wip)){
    header("HTTP/1.1 404 Not Found");
    header("Status: 404 Not Found");
    exit;
}复制代码

2、进行密码验证

///////////////// Password protect ////////////////////////////////////////////////////////////////
define('ADMIN_USERNAME','test');     // Admin Username
define('ADMIN_PASSWORD','test');    // Admin Password
 
 
if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) ||
           $_SERVER['PHP_AUTH_USER'] != ADMIN_USERNAME || $_SERVER['PHP_AUTH_PW'] != ADMIN_PASSWORD) {
            Header("WWW-Authenticate: Basic realm=\"discuz Login\"");
            Header("HTTP/1.0 401 Unauthorized");
 
            echo <<<EOB
                <html><body>
                <h1>Rejected!</h1>
                <big>Wrong Username or Password!</big>
                </body></html>
EOB;
            exit;
}
////////// END OF DEFAULT CONFIG AREA /////////////////////////////////////////////////////////////复制代码

二、NGINX中限制

1、IP限制

官方文档:nginx.org/en/docs/htt…

location / {
    deny  192.168.1.1;
    allow 192.168.1.0/24;
    allow 10.1.1.0/16;
    allow 2001:0db8::/32;
    deny  all;
}复制代码

2、auth_basic 本机认证(nginx默认支持)

官方文档:nginx.org/en/docs/htt…

安装密码工具

yum -y install httpd-tools
生成密码
htpasswd -c pass.db
nginx中配置(需要维护 pass.db 文件)
auth_basic "User Authentication";
auth_basic_user_file  conf/pass.db; 复制代码

3、ngx_http_auth_request_module 第三方认证

需要安装:--with-http_auth_request_module 模块

#auth_basic "User Authentication";
#auth_basic_user_file conf/pass.db;
 
auth_request /auth;
 
location = /auth {
    proxy_pass ...
    proxy_pass_request_body off;
    proxy_set_header Content-Length "";
    proxy_set_header X-Original-URI $request_uri;
}复制代码

这里可以反代到,www.auth.com/api/HttpBas…,代码如下:

///////////////// Password protect ////////////////////////////////////////////////////////////////
define('ADMIN_USERNAME','test');     // Admin Username
define('ADMIN_PASSWORD','test');    // Admin Password
 
 
if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) ||
           $_SERVER['PHP_AUTH_USER'] != ADMIN_USERNAME || $_SERVER['PHP_AUTH_PW'] != ADMIN_PASSWORD) {
            Header("WWW-Authenticate: Basic realm=\"discuz Login\"");
            Header("HTTP/1.0 401 Unauthorized");
 
            echo <<<EOB
                <html><body>
                <h1>Rejected!</h1>
                <big>Wrong Username or Password!</big>
                </body></html>
EOB;
            exit;
}
////////// END OF DEFAULT CONFIG AREA /////////////////////////////////////////////////////////////复制代码

4、 ngx_http_auth_jwt_module 第三方认证

location / {
    auth_jwt           "closed site";
    auth_jwt_key_file  conf/keys.json;
    auth_jwt_claim_set $email info e-mail;
    auth_jwt_claim_set $job info "job title";
}复制代码

加密算法原理同上

配置代码:

location ~ /admin/.*php$ {
location = /admin.php {
 
    allow 127.0.0.1;
    deny all;
 
    auth_basic "Authorized users only"


    
;
     auth_basic_user_file authkey/auth.com.db;
 
    fastcgi_pass common;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME     $document_root$fastcgi_script_name;
 
}复制代码



attachments-2020-06-9Jn5ho2s5ee040ee4a1c9.jpg


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/70097