// Created : Sun Oct 3 14:37:54 JST 2004 // Updated : Fri Sep 24 00:08:38 JST 2004 // Description : // Version : 1.1 // $Id:$ // ////////////////////////////////////////////////////////////// // // (C) Copyright 2004 MIZUBAYASHI Kosuke // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License version 2 as // published by the Free Software Foundation. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License version 2 for more details. // // You can read GNU General Public License version 2 from the URI below. // http://mt.mizba.net/files/GPL.txt // or // http://www.gnu.org/licenses/gpl.txt // // // 本プログラムはフリーソフトウェアです.GNU General Public License // version 2 の定める条件を満たす限りにおいて,再頒布,改変することが // 可能です. // // 本プログラムは有用であることを願って頒布しますが,一切の保証はありません. // 商用として成り立ちうる可能性,特定目的への適合性は,非明示的なものを含めて // 一切存在しません. // 詳しくは GNU General Public License version 2 をご覧下さい. // // GNU General Public License version 2 全文は以下の URI で読むことができます. // http://mt.mizba.net/files/GPL.txt // or // http://www.gnu.org/licenses/gpl.txt // // ////////////////////////////////////////////////////////////// // ChangeLog: // 2004-10-03 14:37 MIZUBAYASHI Kosuke // IP アドレスの追加に対応 // Version 1.1 // 2004-10-03 14:07 MIZUBAYASHI Kosuke // ひとまず完成 // Version 1.0 // 2004-09-24 00:08 MIZUBAYASHI Kosuke // created // Version 0.1 // ////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////// // BEGIN: function IPToBinary ( $p_ip ) { if ( 0 !== preg_match ( "#^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$#" , $p_ip , $v_match ) ) { $result = substr ( "00000000" . decbin ( $v_match [1] ) , -8 ); $result .= substr ( "00000000" . decbin ( $v_match [2] ) , -8 ); $result .= substr ( "00000000" . decbin ( $v_match [3] ) , -8 ); $result .= substr ( "00000000" . decbin ( $v_match [4] ) , -8 ); return $result; } else { return null; } } function isValidTelNo ( $p_targetTelNo , $p_validTelNo ) { if ( $p_targetTelNo == null || $p_validTelNo == null ) { return false; } if ( $p_targetTelNo == "" || $p_validTelNo == "" ) { return false; } return ( 0 !== preg_match ( $p_validTelNo , $p_targetTelNo ) ); } function isValidUserAgent ( $p_targetUserAgent , $p_validUserAgent ) { if ( $p_targetUserAgent == null || $p_validUserAgent == null ) { return false; } return ( strstr ( $p_targetUserAgent , $p_validUserAgent ) !== false ); } function isValidIp ( $p_targetIp , $p_validIps ) { if ( $p_targetIp == null || $p_validIps == null ) { return false; } $v_targetIp = IPToBinary ( $p_targetIp ); $v_validIps = preg_split ( "/[\s]+/" , $p_validIps ); foreach ( $v_validIps as $v_ip ) { if ( 0 === preg_match ( "#^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})/([0-9]{1,2})$#" , $v_ip , $v_match ) ) { continue; } $v_ip0 = IPToBInary ( $v_match [1] ); $v_len = $v_match [2]; if ( substr ( $v_ip0 , 0 , $v_len ) === substr ( $v_targetIp , 0 , $v_len ) ) { return true; } } return false; } function authCheck () { // @$telNo = $_GET [ "TNO" ]; @$userAgent = $_SERVER [ "HTTP_USER_AGENT" ]; @$ip = $_SERVER [ "REMOTE_ADDR" ]; // $errorPage = Auth_errorPage; $ValidTelNoPattern = ( defined ( "Auth_ValidTelNoPattern" ) ) ? Auth_ValidTelNoPattern : "/^" . Auth_ValidTelNo . "$/"; $ValidUserAgent = Auth_ValidUserAgent; $ValidIPs = Auth_ValidIPs; // for DEBUG if ( false ) { if ( isValidTelNo ( $telNo , $ValidTelNoPattern ) ) { print "isValidTelNo "; } if ( isValidUserAgent ( $userAgent , $ValidUserAgent ) ) { print "isValidUserAgent "; } if ( isValidIp ( $ip , $ValidIPs ) ) { print "isValidIp "; } return; } if ( ! ( isValidTelNo ( $telNo , $ValidTelNoPattern ) && isValidUserAgent ( $userAgent , $ValidUserAgent ) && isValidIp ( $ip , $ValidIPs ) ) ) { header ( "Location: " . $errorPage ); exit; } } // END: // ////////////////////////////////////////////////////////////// ?>