%PDF-1.5 %���� ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY
Server IP : 49.231.201.246 / Your IP : 216.73.216.149 Web Server : Apache/2.4.18 (Ubuntu) System : Linux 246 4.4.0-210-generic #242-Ubuntu SMP Fri Apr 16 09:57:56 UTC 2021 x86_64 User : root ( 0) PHP Version : 7.0.33-0ubuntu0.16.04.16 Disable Function : exec,passthru,shell_exec,system,proc_open,popen,pcntl_exec MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /proc/11584/cwd/html/old/libraries/kunena/spam/ |
Upload File : |
<?php /** * Kunena Component * @package Kunena.Framework * * @copyright (C) 2008 - 2014 Kunena Team. All rights reserved. * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL * @link http://www.kunena.org **/ defined ( '_JEXEC' ) or die (); /* * This class is based on a PHP library that handles calling reCAPTCHA. * - Documentation and latest version * http://recaptcha.net/plugins/php/ * - Get a reCAPTCHA API Key * https://www.google.com/recaptcha/admin/create * - Discussion group * http://groups.google.com/group/recaptcha * * Copyright (c) 2007 reCAPTCHA -- http://recaptcha.net * AUTHORS: * Mike Crawford * Ben Maurer * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /** * Class KunenaSpamRecaptcha */ class KunenaSpamRecaptcha { protected $error = ''; protected $config = null; protected $publickey = null; protected $privatekey = null; protected $host = null; public function __construct() { $this->config = KunenaFactory::getConfig(); $this->publickey = $this->config->recaptcha_publickey; $this->privatekey = $this->config->recaptcha_privatekey; $this->host = JRequest::getString('REMOTE_ADDR', null, 'server'); } public static function getInstance() { static $instance = null; if (!$instance) $instance = new KunenaSpamRecaptcha(); return $instance; } public function enabled() { $me = KunenaUserHelper::getMyself(); $config = KunenaFactory::getConfig(); // Enabled if guest captcha is enabled and user is not logged in if ($config->captcha && !$me->exists()) return true; // Enabled if user is moderator or has more posts than the threshold // FIXME: we need a better logic for trusted users if ($me->exists() && !$me->isModerator() && $me->posts < $config->captcha_post_limit) return true; // Captcha is disabled return false; } /** * Gets the challenge HTML (javascript and non-javascript version). * This is called from the browser, and the resulting reCAPTCHA HTML widget * is embedded within the HTML form it was called from. * @return string - The HTML to be embedded in the user's form. */ public function getHtml () { if ( empty($this->publickey) ) { $this->error = JText::sprintf ( 'COM_KUNENA_RECAPTCHA_ERROR_INVALID_CONFIGURATION', JText::_ ( 'COM_KUNENA_RECAPTCHA_ERROR_INVALID_CONFIGURATION_NO_PUBLIC_KEY' ) ); return false; } if ( empty($this->privatekey) ) { $this->error = JText::sprintf ( 'COM_KUNENA_RECAPTCHA_ERROR_INVALID_CONFIGURATION', JText::_ ( 'COM_KUNENA_RECAPTCHA_ERROR_INVALID_CONFIGURATION_NO_PRIVATE_KEY' ) ); return false; } JFactory::getDocument()->addCustomTag('<script type="text/javascript"> <!-- var RecaptchaOptions = { custom_translations : { instructions_visual : "'.JText::_('COM_KUNENA_RECAPTCHA_JS_INSTRUCTIONS_VISUAL').'", instructions_audio : "'.JText::_('COM_KUNENA_RECAPTCHA_JS_INSTRUCTIONS_AUDIO').'", play_again : "'.JText::_('COM_KUNENA_RECAPTCHA_JS_PLAY_AGAIN').'", cant_hear_this : "'.JText::_('COM_KUNENA_RECAPTCHA_JS_CANT_HEAR_THIS').'", visual_challenge : "'.JText::_('COM_KUNENA_RECAPTCHA_JS_VISUAL_CHALLENGE').'", audio_challenge : "'.JText::_('COM_KUNENA_RECAPTCHA_JS_AUDIO_CHALLENGE').'", refresh_btn : "'.JText::_('COM_KUNENA_RECAPTCHA_JS_REFRESH_CODE').'", help_btn : "'.JText::_('COM_KUNENA_RECAPTCHA_JS_HELP_BTN').'", incorrect_try_again : "'.JText::_('COM_KUNENA_RECAPTCHA_ERROR_INCORRECT_CAPTCHA_SOL').'", }, theme : "'.$this->config->recaptcha_theme.'" }; //--> </script> '); $server = 'http'.($this->_isSSLConnection() ? 's' : '').'://www.google.com/recaptcha/api'; $errorpart = ''; if ($this->error) { $errorpart = "&error=" . $this->error; } // TODO: see http://karlsheen.com/mootools/recaptcha-using-mootools-request // TODO: see http://code.google.com/intl/fi-FI/apis/recaptcha/docs/display.html (json) return '<script type="text/javascript" src="'. $server . '/challenge?k=' . $this->publickey . $errorpart . '"></script> <noscript> <iframe src="'. $server . '/noscript?k=' . $this->publickey . $errorpart . '" height="300" width="500" frameborder="0"></iframe><br /> <textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea> <input type="hidden" name="recaptcha_response_field" value="manual_challenge" /> </noscript>'; } /** * Calls an HTTP POST function to verify if the user's guess was correct. * * @param array $extra_params An array of extra variables to post to the server. * * @return bool */ public function verify($extra_params = array()) { if ( empty($this->privatekey) ) { $this->error = JText::sprintf ( 'COM_KUNENA_RECAPTCHA_ERROR_INVALID_CONFIGURATION', JText::_ ( 'COM_KUNENA_RECAPTCHA_ERROR_INVALID_CONFIGURATION_NO_PRIVATE_KEY' ) ); return false; } $challenge = JRequest::getString('recaptcha_challenge_field'); $response = JRequest::getString('recaptcha_response_field'); // Discard spam if ($challenge == null || strlen($challenge) == 0 || $response == null || strlen($response) == 0) { $this->error = JText::_ ( 'COM_KUNENA_RECAPTCHA_ERROR_INCORRECT_CAPTCHA_SOL' ); return false; } $response = $this->_query ("/recaptcha/api/verify", array ( 'privatekey' => $this->privatekey, 'remoteip' => $this->host, 'challenge' => $challenge, 'response' => $response ) + $extra_params ); if (!$response) { $response[1] = "false\nrecaptcha-not-reachable"; } $answers = preg_split('/[\s,]+/', $response[1]); if (empty($answers[0]) || trim ($answers [0]) != 'true') { $this->error = JText::_ ( 'COM_KUNENA_RECAPTCHA_ERROR_' . preg_replace('/[^\w\d]+/', '_', strtoupper($answers[1])) ); return false; } return true; } /** * Get error string * @return string Error code */ public function getError() { return $this->error; } protected function _isSSLConnection() { return ((isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on')) || getenv('SSL_PROTOCOL_VERSION')); } /** * Encodes the given data into a query string format * @param $data - array of string elements to be encoded * @return string - encoded request */ private function _encode ($data) { $req = ''; foreach ( $data as $key => $value ) $req .= $key . '=' . urlencode( $value ) . '&'; // Cut the last '&' $req=substr($req,0,strlen($req)-1); return $req; } /** * Submits an HTTP POST to a reCAPTCHA server * @param string $path * @param array $data * @param int $port * @return array response */ private function _query($path, $data, $port = 80) { $req = $this->_encode ($data); $host = 'www.google.com'; $http_request = "POST $path HTTP/1.0\r\n"; $http_request .= "Host: $host\r\n"; $http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n"; $http_request .= "Content-Length: " . strlen($req) . "\r\n"; $http_request .= "User-Agent: Kunena Forum/".KunenaForum::version()."\r\n"; $http_request .= "\r\n"; $http_request .= $req; $response = ''; if( false == ( $fs = @fsockopen($host, $port, $errno, $errstr, 10) ) ) { return null; } fwrite($fs, $http_request); while ( !feof($fs) ) $response .= fgets($fs, 1160); // One TCP-IP packet fclose($fs); $response = explode("\r\n\r\n", $response, 2); return $response; } }