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 + -
显示快捷键?