403Webshell
Server IP : 85.158.181.41  /  Your IP : 216.73.217.12
Web Server : Apache
System : Linux cloud9-vm129 6.1.178+1-ph #ph SMP PREEMPT_DYNAMIC Wed Jul 29 09:00:54 UTC 2026 x86_64
User : moncbefd ( 1024)
PHP Version : 7.3.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/moncbefd/www.moneta.at/system/classes/security/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/moncbefd/www.moneta.at/system/classes/security/Captcha.inc.php
<?php
/* --------------------------------------------------------------
   Captcha.inc.php 2019-09-12
   Gambio GmbH
   http://www.gambio.de
   Copyright (c) 2019 Gambio GmbH
   Released under the GNU General Public License (Version 2)
   [http://www.gnu.org/licenses/gpl-2.0.html]
   --------------------------------------------------------------
*/

/**
 * Class Captcha
 */
class Captcha
{
	protected $captchaType = '';
	protected $publicKey = '';
	protected $privateKey = '';
	protected $vvCode = '';
	protected $vvCodeName = '';
	protected $captchaTheme = '';
	protected $error = '';
	protected $resultHtml = '';

	protected static $RECAPTCHA_V2_VERIFICATION_SERVER = 'https://www.google.com/recaptcha/api/siteverify';


	// ######### CONSTRUCTOR #########


	/**
	 * @param string $vvCodeName
	 * @param string $captchaTheme
	 * @param int    $vvCodeLength
	 */
	public function __construct($vvCodeName = 'vvcode', $captchaTheme = 'white', $vvCodeLength = 6)
	{
		$this->publicKey = gm_get_conf('GM_RECAPTCHA_PUBLIC_KEY');
		$this->privateKey = gm_get_conf('GM_RECAPTCHA_PRIVATE_KEY');
		$this->vvCodeName = $vvCodeName;
		$this->captchaTheme = $captchaTheme;

		$this->captchaType = gm_get_conf('GM_CAPTCHA_TYPE');
		if($this->captchaType === 'standard')
        {
	        $this->captchaType = 'vvCode';
            $this->reload_vv_code($vvCodeLength);
        }
	}


	// ######### PUBLIC METHODS #########


	/**
	 * @param int $vvCodeLength
	 */
	public function reload_vv_code($vvCodeLength = 6)
	{
		include_once(DIR_FS_INC . 'xtc_random_charcode.inc.php');
		$this->vvCode = $_SESSION['vvcode'];
		$vvCode = xtc_random_charcode($vvCodeLength);
		$_SESSION['vvcode'] = $vvCode;
	}

	/**
	 * @param array  $requestData
	 * @param string $section
	 * @param bool   $isAjaxRequest
	 *
	 * @return bool
	 */
	public function is_valid($requestData, $section = '', $isAjaxRequest = false)
	{
		$sectionIsSecured = gm_get_conf($section);

		if($sectionIsSecured === 'false')
		{
			return true;
		}

		switch ($this->captchaType)
		{
            case 'recaptcha_v2':

                return $this->_validateCaptchaTypeRecaptchaV2($requestData);

			case 'vvCode':

				return $this->_validateCaptchaTypeVvcode($requestData, $isAjaxRequest);

			default:
				return false;
		}
	}


	/**
	 * @return string
	 */
	public function get_html()
	{
		$this->prepare_data();
		return $this->resultHtml;
	}


	// ######### PROTECTED METHODS #########


	/**
	 * @return string
	 */
	protected function prepare_data()
	{
		switch ($this->captchaType)
		{
            case 'recaptcha_v2':
                $this->_getResultHtmlRecaptchaV2();
                break;
			case 'vvCode':
				$this->_getResultHtmlVvCode();
				break;

			default:
				return '';
		}
	}


	/**
	 * Gets the resulting HTML for reCaptcha and saves it to $resultHtml
	 */
	protected function _getResultHtmlRecaptcha()
	{
		include_once(DIR_FS_CATALOG . 'includes/recaptchalib.php');
		$html = recaptcha_get_html($this->publicKey, $this->error, true);
		$this->error = '';
		$contentView = MainFactory::create(self::_themeContentViewCheck('CaptchaContentView'));
		$contentView->setIsRecaptcha(true);
		$contentView->setCaptchaTheme($this->captchaTheme);
		$contentView->setPublicKey($this->publicKey);
		$contentView->setRecaptchaHtml($html);

		$this->setResultHtml($contentView->get_html());
	}

    /**
     * Gets the resulting HTML for reCaptcha and saves it to $resultHtml
     */
    protected function _getResultHtmlRecaptchaV2()
    {
        $contentView = MainFactory::create(self::_themeContentViewCheck('CaptchaContentView'));
        $contentView->setIsRecaptchaV2(true);
        $contentView->setPublicKey($this->publicKey);

        $this->setResultHtml($contentView->get_html());
    }


	/**
	 * Gets the resulting HTML for vvCode Captcha and saves it to $resultHtml
	 */
	protected function _getResultHtmlVvCode()
	{
		$contentView = MainFactory::create(self::_themeContentViewCheck('CaptchaContentView'));
		$contentView->setCaptchaName($this->vvCodeName);
		$contentView->setCaptchaUrl(xtc_href_link('request_port.php', 'rand=' . rand() . '&module=CreateVVCode', 'SSL', true, false));

		$this->setResultHtml($contentView->get_html());
	}

    /**
     * Checks whether the captcha response was a success from reCaptcha V2
     *
     * @return bool
     */
    protected function _validateCaptchaTypeRecaptchaV2(array $requestData)
    {
	    if(empty($requestData['g-recaptcha-response']))
	    {
		    return false;
	    }

	    // The data that needs to be in the query of the request
	    $data = [
		    'secret'   => $this->privateKey,
		    'response' => $requestData['g-recaptcha-response']
	    ];

	    $ch = curl_init();
	    curl_setopt($ch, CURLOPT_URL, self::$RECAPTCHA_V2_VERIFICATION_SERVER);
	    curl_setopt($ch, CURLOPT_POST, true);
	    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
	    $verify = curl_exec($ch);
	    curl_close($ch);

	    $response = json_decode($verify);

	    // Verify that the response was successful
	    if(!$response->success)
	    {
		    $this->error = $response->error->codes;

		    return false;
	    }

        return true;
    }

	/**
	 * @param array $requestData
	 *
	 * @return bool
	 */
	protected function _validateCaptchaTypeRecaptcha(array $requestData)
	{
		if(empty($requestData['recaptcha_response_field']) || empty($requestData['recaptcha_challenge_field']))
		{
			return false;
		}

		include_once(DIR_FS_CATALOG . 'includes/recaptchalib.php');
		$response = recaptcha_check_answer($this->privateKey, $_SERVER["REMOTE_ADDR"], $requestData['recaptcha_challenge_field'], $requestData['recaptcha_response_field']);

		if(!$response->is_valid)
		{
			$this->error = $response->error;
			return false;
		}

		return true;
	}


	/**
	 * @param array $requestData
	 * @param bool $isAjaxRequest
	 *
	 * @return bool
	 */
	protected function _validateCaptchaTypeVvcode(array $requestData, $isAjaxRequest)
	{
		if(empty($requestData[$this->vvCodeName]))
		{
			return false;
		}

		$vvCode = $this->vvCode;
		$this->vvCode = $_SESSION['vvcode'];

		if($isAjaxRequest)
		{
			$vvCode = $this->vvCode;
		}

		return strtoupper($requestData[$this->vvCodeName]) == $vvCode;
	}


	// ######### SETTER #########
	/**
	 * @param string $resultHtml
	 */
	public function setResultHtml($resultHtml)
	{
		$this->resultHtml = (string)$resultHtml;
	}

    /**
     * checks if the theme system is active
     *
     * @return bool
     */
    protected static function _isThemeSystemActive()
    {
        return (defined('CURRENT_THEME') && !empty(CURRENT_THEME)) || (defined('PREVIEW_MODE') && PREVIEW_MODE);
    }

    /**
     * helper function to swap to theme content view if the theme system is active
     *
     * @param $contentView
     * @return mixed
     */
    protected static function _themeContentViewCheck($contentView)
    {
        if (self::_isThemeSystemActive())
        {
            str_replace('ContentView', 'ThemeContentView', $contentView);
        }

        return $contentView;
    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit