auth.php
来自「sabreipb 2.1.6 utf-8中文版本!」· PHP 代码 · 共 302 行
PHP
302 行
<?php/*+---------------------------------------------------------------------------| Invision Power Board V2.1.0| ========================================| by Matthew Mecham| (c) 2004 Invision Power Services| | ========================================+---------------------------------------------------------------------------| INVISION POWER DYNAMIC IS NOT FREE SOFTWARE!| /dynamic/+---------------------------------------------------------------------------|| > LOG IN MODULE: Converted Board Modules| > Script written by Stewart Campbell| > Date started: October 15th 2005|+---------------------------------------------------------------------------| NOTES:| This module is part of the authentication suite of modules. It's designed| to enable different types of authentication.|| RETURN CODES| 'ERROR': Error, check array: $class->auth_errors| 'NO_USER': No user found in LOCAL record set but auth passed in REMOTE dir| 'WRONG_AUTH': Wrong password or username| 'SUCCESS': Success, user and password matched|+---------------------------------------------------------------------------| EXAMPLE USAGE|| $class = new login_method();| $class->is_admin_auth = 0; // Boolean (0,1) Use different queries if desired| // if logging into CP.| $class->allow_create = 0;| // $allow_create. Boolean flag (0,1) to tell the module whether its allowed| // to create a member in the IPS product's database if the user passed authentication| // but don't exist in the IPS product's database. Optional.|| $return_code = $class->authenticate( $username, $plain_text_password );|| if ( $return_code == 'SUCCESS' )| {| print $class->member['member_name'];| }| else| {| print "NO USER";| }+---------------------------------------------------------------------------*/class login_method extends login_core{ # Globals var $member; /*-------------------------------------------------------------------------*/ // Constructor /*-------------------------------------------------------------------------*/ function login_method() { } /*-------------------------------------------------------------------------*/ // Authentication /*-------------------------------------------------------------------------*/ function authenticate( $username, $password ) { global $ipsclass; $this->_load_member( $username ); if($ipsclass->vars['conv_configured'] != 1) { $this->return_code = "WRONG_AUTH"; return; } switch($ipsclass->vars['conv_chosen']) { case 'vb3': case 'vb35': $this->authenticate_vb3( $username, $password ); break; case 'ib31': $this->authenticate_ib31( $username, $password ); break; case 'smf11': $this->authenticate_smf11( $username, $password ); break; case 'smf10': case 'yabbse': $this->authenticate_smf( $username, $password ); break; case 'ubbt5': $this->authenticate_ubbthreads5( $username, $password ); break; default: $this->return_code = "WRONG_AUTH"; return; } return; } /*-------------------------------------------------------------------------*/ // Authentication for vB3 /*-------------------------------------------------------------------------*/ function authenticate_vb3( $username, $password ) { global $ipsclass; if ( $this->member['misc']) { $single_md5_pass = md5( $password ); $decr = md5( $single_md5_pass . $this->member['misc'] ); if ( $decr == $this->member['legacy_password'] ) { $this->_clean_convert_data( $single_md5_pass ); $this->return_code = 'SUCCESS'; return; } } $this->return_code = 'WRONG_AUTH'; } /*-------------------------------------------------------------------------*/ // Authentication for iB3.1 /*-------------------------------------------------------------------------*/ function authenticate_ib31( $username, $password ) { $decr = md5( $password . $username ); $single_md5_pass = md5( $password ); if ( $decr == $this->member['legacy_password'] ) { $this->_clean_convert_data( $single_md5_pass ); $this->return_code = "SUCCESS"; return; } $this->return_code = "WRONG_AUTH"; } /*-------------------------------------------------------------------------*/ // Authentication for SMF 1.1 /*-------------------------------------------------------------------------*/ function authenticate_smf11( $username, $password ) { if($this->member['misc']) { $username_low = strtolower($username); $sha1_password = sha1($username_low . $password); $success = false; if($sha1_password == $this->member['legacy_password']) { $success = true; } else { $this->authenticate_smf( $username, $password ); if($this->return_code == "SUCCESS") { $success = true; } } if( $success ) { $this->_clean_convert_data( $single_md5_pass ); $this->return_code = "SUCCESS"; return; } $this->return_code = "WRONG_AUTH"; return; } } /*-------------------------------------------------------------------------*/ // Authentication for SMF / YABB.SE /*-------------------------------------------------------------------------*/ function authenticate_smf( $username, $password ) { if($this->member['misc']) { $single_md5_pass = md5( $password ); $success = false; if ( crypt( $password, substr( $password,0,2 ) ) == $this->member['legacy_password'] ) { $success = true; } else if ( strlen($this->member['legacy_password']) == 32 AND ( $this->_md5_hmac( $password, $username ) == $this->member['legacy_password'] ) ) { $success = true; } else if ( strlen($this->member['legacy_password']) == 32 AND ( $single_md5_pass == $this->member['legacy_password'] ) ) { $success = true; } if( $success ) { $this->_clean_convert_data( $single_md5_pass ); $this->return_code = "SUCCESS"; return; } } $this->return_code = "WRONG_AUTH"; return; } //*-------------------------------------------------------------------------*/ // Authentication for UBB.Threads 5 //*-------------------------------------------------------------------------*/ function authenticate_ubbthreads5( $username, $password ) { $single_md5_pass = md5( $password ); $success = false; if(crypt($password, $this->member['legacy_password']) == $this->member['legacy_password']) { $success = true; } else if($single_md5_pass == $row['legacy_password']) { $success = true; } if( $success ) { $this->_clean_convert_data( $single_md5_pass ); $this->return_code = "SUCCESS"; return; } $this->return_code = "WRONG_AUTH"; return; } /*-------------------------------------------------------------------------*/ // Utility Functions /*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/ // Load member from DB /*-------------------------------------------------------------------------*/ function _load_member( $username ) { $this->member = $this->ipsclass->DB->build_and_exec_query( array( 'select' => '*', 'from' => 'members', 'where' => "name='" . $username . "'" ) ); } /*-------------------------------------------------------------------------*/ // Clean-Up The Converted Data /*-------------------------------------------------------------------------*/ function _clean_convert_data( $new_pass ) { global $ipsclass; $ipsclass->DB->query("UPDATE ibf_members SET legacy_password='',misc='0' WHERE id={$this->member['id']}"); $ipsclass->converge->converge_update_password( $new_pass, $this->member['email'] ); } function _md5_hmac($data, $key) { if (strlen($key) > 64) $key = pack('H*', md5($key)); $key = str_pad($key, 64, chr(0x00)); $k_ipad = $key ^ str_repeat(chr(0x36), 64); $k_opad = $key ^ str_repeat(chr(0x5c), 64); return md5($k_opad . pack('H*', md5($k_ipad . $data))); }}?>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?