<?php if(!defined("MCR")){ exit("Hacking Attempt!"); } /** * KeyCAPTCHA universal PHP class v4.0.0 * Copyright (C) 2012 Mersane, Ltd (www.keycaptcha.com). All rights reserved. * License GNU/GPL 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) **/ /* 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 for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ if ( !class_exists('KeyCAPTCHA_CLASS') ) { class KeyCAPTCHA_CLASS { private $p_kc_private_key = ''; private $p_kc_user_id = ''; private $c_kc_keyword = 'accept'; private $p_kc_visitor_ip = ''; private $p_kc_session_id = ''; private $p_kc_web_server_sign = ''; private $p_kc_web_server_sign2 = ''; private $p_kc_js_code = ''; private $core = false; public function get_web_server_sign($use_visitor_ip = 0) { return md5($this->p_kc_session_id . (($use_visitor_ip) ? ($this->p_kc_visitor_ip) :("")) . $this->p_kc_private_key); } function __construct($a_js_code='', $core=false) { $this->core = $core; $this->p_kc_user_id = $core->cfg->main['kc_public']; $this->p_kc_private_key = $core->cfg->main['kc_private']; if ( $a_js_code != '' ) { $this->p_kc_js_code = $a_js_code; } else { $this->p_kc_js_code = "<!-- KeyCAPTCHA code (www.keycaptcha.com) --><script type='text/javascript'>var s_s_c_user_id = '$this->p_kc_user_id';var s_s_c_session_id = '#KC_SESSION_ID#';var s_s_c_captcha_field_id = 'capcode';var s_s_c_submit_button_id = 'postbut';var s_s_c_web_server_sign = '#KC_WSIGN#';var s_s_c_web_server_sign2 = '#KC_WSIGN2#';</script><script language=JavaScript src='http://backs.keycaptcha.com/swfs/cap.js'></script><!-- end of KeyCAPTCHA code -->"; } $this->p_kc_session_id = uniqid() . '-4.0.0.001'; $this->p_kc_visitor_ip = $core->user->ip; } function http_get($path) { $arr = parse_url($path); $host = $arr['host']; $page = $arr['path']; if ( $page=='' ) { $page='/'; } if ( isset( $arr['query'] ) ) { $page.='?'.$arr['query']; } $errno = 0; $errstr = ''; $fp = fsockopen ($host, 80, $errno, $errstr, 30); if (!$fp){ return ""; } $request = "GET $page HTTP/1.0\r\n"; $request .= "Host: $host\r\n"; $request .= "Connection: close\r\n"; $request .= "Cache-Control: no-store, no-cache\r\n"; $request .= "Pragma: no-cache\r\n"; $request .= "User-Agent: KeyCAPTCHA\r\n"; $request .= "\r\n"; fwrite ($fp,$request); $out = ''; while (!feof($fp)) $out .= fgets($fp, 250); fclose($fp); $ov = explode("close\r\n\r\n", $out); return $ov[1]; } public function check_result($response) { $kc_vars = explode("|", $response); if ( count( $kc_vars ) < 4 ) { return false; } if ($kc_vars[0] == md5($this->c_kc_keyword . $kc_vars[1] . $this->p_kc_private_key . $kc_vars[2])) { if (stripos($kc_vars[2], "http://") !== 0) { $kc_current_time = time(); $kc_var_time = split('[/ :]', $kc_vars[2]); $kc_submit_time = gmmktime($kc_var_time[3], $kc_var_time[4], $kc_var_time[5], $kc_var_time[1], $kc_var_time[2], $kc_var_time[0]); if (($kc_current_time - $kc_submit_time) < 15) { return true; } } else { if ($this->http_get($kc_vars[2]) == "1") { return true; } } } return false; } public function render_js () { if ( isset($_SERVER['HTTPS']) && ( $_SERVER['HTTPS'] == 'on' ) ) { $this->p_kc_js_code = str_replace ("http://","https://", $this->p_kc_js_code); } $this->p_kc_js_code = str_replace ("#KC_SESSION_ID#", $this->p_kc_session_id, $this->p_kc_js_code); $this->p_kc_js_code = str_replace ("#KC_WSIGN#", $this->get_web_server_sign(1), $this->p_kc_js_code); $this->p_kc_js_code = str_replace ("#KC_WSIGN2#", $this->get_web_server_sign(), $this->p_kc_js_code); return $this->p_kc_js_code; } } } ?>