Vergleich inc/class_captcha.php - 1.8.9 - 1.8.37

  Keine Änderungen   Hinzugefügt   Modifiziert   Entfernt
Zeile 39Zeile 39
	 * Type of CAPTCHA.
*
* 1 = Default CAPTCHA

	 * Type of CAPTCHA.
*
* 1 = Default CAPTCHA

	 * 2 = reCAPTCHA

 
	 * 4 = NoCATPCHA reCAPTCHA

	 * 4 = NoCATPCHA reCAPTCHA

 
	 * 5 = reCAPTCHA invisible
* 6 = hCaptcha
* 7 = hCaptcha invisible
* 8 = reCAPTCHA v3

	 *
* @var int
*/
public $type = 0;

	 *
* @var int
*/
public $type = 0;

 

/**
* CAPTCHA constants declaration
*
* @var int
*/
const DEFAULT_CAPTCHA = 1;
const NOCAPTCHA_RECAPTCHA = 4;
const RECAPTCHA_INVISIBLE = 5;
const HCAPTCHA = 6;
const HCAPTCHA_INVISIBLE = 7;
const RECAPTCHA_V3 = 8;


/**
* The template to display the CAPTCHA in


/**
* The template to display the CAPTCHA in

Zeile 104Zeile 119
		{
$this->captcha_template = $template;


		{
$this->captcha_template = $template;


			if($this->type == 2)
{
$this->captcha_template .= "_recaptcha";
}
else if($this->type == 4){
$this->captcha_template .= "_nocaptcha";
}
}

// Work on which CAPTCHA we've got installed
if($this->type == 2 && $mybb->settings['captchapublickey'] && $mybb->settings['captchaprivatekey'])
{
// We want to use reCAPTCHA, set the server options
$this->server = "//www.google.com/recaptcha/api";
$this->verify_server = "www.google.com";







			if($this->type == captcha::NOCAPTCHA_RECAPTCHA)
{
$this->captcha_template .= "_nocaptcha";
}
elseif($this->type == captcha::RECAPTCHA_INVISIBLE)
{
$this->captcha_template .= "_recaptcha_invisible";
}
elseif($this->type == captcha::HCAPTCHA)
{
$this->captcha_template .= "_hcaptcha";
}
elseif($this->type == captcha::HCAPTCHA_INVISIBLE)
{
$this->captcha_template .= "_hcaptcha_invisible";
}
elseif($this->type == captcha::RECAPTCHA_V3)
{
$this->captcha_template .= "_recaptcha_invisible";
}
}





			if($build == true)
{
$this->build_recaptcha();
}
}
else if($this->type == 4 && $mybb->settings['captchapublickey'] && $mybb->settings['captchaprivatekey'])

		// Work on which CAPTCHA we've got installed
if(in_array($this->type, array(captcha::NOCAPTCHA_RECAPTCHA, captcha::RECAPTCHA_INVISIBLE, captcha::RECAPTCHA_V3)) && $mybb->settings['recaptchapublickey'] && $mybb->settings['recaptchaprivatekey'])





		{

		{

			// We want to use reCAPTCHA, set the server options

			// We want to use noCAPTCHA or reCAPTCHA invisible, set the server options

			$this->server = "//www.google.com/recaptcha/api.js";
$this->verify_server = "https://www.google.com/recaptcha/api/siteverify";

			$this->server = "//www.google.com/recaptcha/api.js";
$this->verify_server = "https://www.google.com/recaptcha/api/siteverify";





			if($build == true)
{
$this->build_recaptcha();
}
}

			if($build == true)
{
$this->build_recaptcha();
}
}

		else if($this->type == 1)












		elseif(in_array($this->type, array(captcha::HCAPTCHA, captcha::HCAPTCHA_INVISIBLE)) && $mybb->settings['hcaptchapublickey'] && $mybb->settings['hcaptchaprivatekey'])
{
// We want to use hCaptcha or hCaptcha invisible, set the server options
$this->server = "//js.hcaptcha.com/1/api.js";
$this->verify_server = "https://hcaptcha.com/siteverify";

if($build == true)
{
$this->build_hcaptcha();
}
}
elseif($this->type == captcha::DEFAULT_CAPTCHA)

		{
if(!function_exists("imagecreatefrompng"))
{
// We want to use the default CAPTCHA, but it's not installed
return;

		{
if(!function_exists("imagecreatefrompng"))
{
// We want to use the default CAPTCHA, but it's not installed
return;

			}
else if($build == true)

			}
elseif($build == true)

			{
$this->build_captcha();
}
}

$plugins->run_hooks('captcha_build_end', $args);

			{
$this->build_captcha();
}
}

$plugins->run_hooks('captcha_build_end', $args);

	}

	}


/**
* @param bool $return Not used


/**
* @param bool $return Not used

Zeile 158Zeile 186
	function build_captcha($return = false)
{
global $db, $lang, $templates, $theme, $mybb;

	function build_captcha($return = false)
{
global $db, $lang, $templates, $theme, $mybb;





		// This will build a MyBB CAPTCHA
$randomstr = random_str(5);
$imagehash = md5(random_str(12));

		// This will build a MyBB CAPTCHA
$randomstr = random_str(5);
$imagehash = md5(random_str(12));





		$insert_array = array(
"imagehash" => $imagehash,
"imagestring" => $randomstr,

		$insert_array = array(
"imagehash" => $imagehash,
"imagestring" => $randomstr,

Zeile 172Zeile 200
		$db->insert_query("captcha", $insert_array);
eval("\$this->html = \"".$templates->get($this->captcha_template)."\";");
//eval("\$this->html = \"".$templates->get("member_register_regimage")."\";");

		$db->insert_query("captcha", $insert_array);
eval("\$this->html = \"".$templates->get($this->captcha_template)."\";");
//eval("\$this->html = \"".$templates->get("member_register_regimage")."\";");

	}


	}


	function build_recaptcha()
{
global $lang, $mybb, $templates;

	function build_recaptcha()
{
global $lang, $mybb, $templates;





		// This will build a reCAPTCHA

		// This will build a reCAPTCHA

		$server = $this->server;
$public_key = $mybb->settings['captchapublickey'];









		$server = $this->server;
$public_key = $mybb->settings['recaptchapublickey'];

eval("\$this->html = \"".$templates->get($this->captcha_template, 1, 0)."\";");
//eval("\$this->html = \"".$templates->get("member_register_regimage_recaptcha")."\";");
}

function build_hcaptcha()
{
global $lang, $mybb, $templates, $theme;





 
		// This will build a hCaptcha
$server = $this->server;
$public_key = $mybb->settings['hcaptchapublickey'];
$captcha_theme = $mybb->settings['hcaptchatheme'];
$captcha_size = $mybb->settings['hcaptchasize'];


		eval("\$this->html = \"".$templates->get($this->captcha_template, 1, 0)."\";");

		eval("\$this->html = \"".$templates->get($this->captcha_template, 1, 0)."\";");

		//eval("\$this->html = \"".$templates->get("member_register_regimage_recaptcha")."\";");

 
	}

	}





	/**
* @return string
*/

	/**
* @return string
*/

Zeile 195Zeile 236

$field = array();



$field = array();


		if($this->type == 1)
{
// Names
$hash = "imagehash";
$string = "imagestring";

// Values
$field['hash'] = $db->escape_string($mybb->input['imagehash']);
$field['string'] = $db->escape_string($mybb->input['imagestring']);
}
else if($this->type == 2)

		if($this->type == captcha::DEFAULT_CAPTCHA)











		{
// Names

		{
// Names

			$hash = "recaptcha_challenge_field";
$string = "recaptcha_response_field";

			$hash = "imagehash";
$string = "imagestring";


// Values


// Values

			$field['hash'] = $mybb->input['recaptcha_challenge_field'];
$field['string'] = $mybb->input['recaptcha_response_field'];

			$field['hash'] = $db->escape_string($mybb->get_input('imagehash'));
$field['string'] = $db->escape_string($mybb->get_input('imagestring'));

		}

		}

		else if($this->type == 3)

		elseif($this->type == 3)

		{
// Are You a Human can't be built as a hidden captcha
return '';

		{
// Are You a Human can't be built as a hidden captcha
return '';

Zeile 234Zeile 265

$plugins->run_hooks('captcha_validate_start', $this);



$plugins->run_hooks('captcha_validate_start', $this);


		if($this->type == 1)

		if($this->type == captcha::DEFAULT_CAPTCHA)

		{
// We have a normal CAPTCHA to handle

		{
// We have a normal CAPTCHA to handle

			$imagehash = $db->escape_string($mybb->input['imagehash']);
$imagestring = $db->escape_string(my_strtolower($mybb->input['imagestring']));

			$imagehash = $db->escape_string($mybb->get_input('imagehash'));
$imagestring = $db->escape_string(my_strtolower($mybb->get_input('imagestring')));


switch($db->type)
{


switch($db->type)
{

Zeile 260Zeile 291
				$db->delete_query("captcha", "imagehash = '{$imagehash}'");
}
}

				$db->delete_query("captcha", "imagehash = '{$imagehash}'");
}
}

		elseif($this->type == 2)

		elseif(in_array($this->type, array(captcha::NOCAPTCHA_RECAPTCHA, captcha::RECAPTCHA_INVISIBLE)))

		{

		{

			$challenge = $mybb->input['recaptcha_challenge_field'];
$response = $mybb->input['recaptcha_response_field'];





















			$response = $mybb->get_input('g-recaptcha-response');
if(!$response || strlen($response) == 0)
{
$this->set_error($lang->invalid_nocaptcha);
}
else
{
// We have a noCAPTCHA or reCAPTCHA invisible to handle
// Contact Google and see if our reCAPTCHA was successful
$response = fetch_remote_file($this->verify_server, array(
'secret' => $mybb->settings['recaptchaprivatekey'],
'remoteip' => $session->ipaddress,
'response' => $response
));

if($response == false)
{
$this->set_error($lang->invalid_nocaptcha_transmit);
}
else
{
$answer = json_decode($response, true);





			if(!$challenge || strlen($challenge) == 0 || !$response || strlen($response) == 0)












					if($answer['success'] != 'true')
{
// We got it wrong! Oh no...
$this->set_error($lang->invalid_nocaptcha);
}
}
}
}
elseif($this->type == captcha::RECAPTCHA_V3)
{
$response = $mybb->get_input('g-recaptcha-response');
if(!$response || strlen($response) == 0)

			{

			{

				$this->set_error($lang->invalid_captcha);

				$this->set_error($lang->invalid_nocaptcha);

			}
else
{

			}
else
{

				// We have a reCAPTCHA to handle
$data = $this->_qsencode(array(
'privatekey' => $mybb->settings['captchaprivatekey'],



				// We have a reCAPTCHA invisible to handle
// Contact Google and see if our reCAPTCHA was successful
$response = fetch_remote_file($this->verify_server, array(
'secret' => $mybb->settings['recaptchaprivatekey'],
'score' => $mybb->settings['recaptchascore'],

					'remoteip' => $session->ipaddress,

					'remoteip' => $session->ipaddress,

					'challenge' => $challenge,

 
					'response' => $response
));


					'response' => $response
));


				// Contact Google and see if our reCAPTCHA was successful
$http_request = "POST /recaptcha/api/verify HTTP/1.0\r\n";
$http_request .= "Host: $this->verify_server\r\n";
$http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n";
$http_request .= "Content-Length: ".strlen($data)."\r\n";
$http_request .= "User-Agent: reCAPTCHA/PHP\r\n";
$http_request .= "\r\n";
$http_request .= $data;

$fs = @fsockopen($this->verify_server, 80, $errno, $errstr, 10);

if($fs == false)

				if($response === false)












				{

				{

					$this->set_error($lang->invalid_captcha_transmit);

					$this->set_error($lang->invalid_nocaptcha_transmit);

				}
else
{

				}
else
{

					// We connected, but is it correct?
fwrite($fs, $http_request);

					$answer = json_decode($response, true);






					while(!feof($fs))

					if($answer['success'] != 'true' || $answer['score'] < $mybb->settings['recaptchascore'])

					{

					{

						$response .= fgets($fs, 1160);
}

fclose($fs);

$response = explode("\r\n\r\n", $response, 2);
$answer = explode("\n", $response[1]);

if(trim($answer[0]) != 'true')
{
// We got it wrong! Oh no...
$this->set_error($lang->invalid_captcha_verify);
}
}
}

						// We got it wrong! Oh no...
$this->set_error($lang->invalid_nocaptcha);
}
}
}











		}

		}

		elseif($this->type == 4)

		elseif(in_array($this->type, array(captcha::HCAPTCHA, captcha::HCAPTCHA_INVISIBLE)))

		{

		{

			$response = $mybb->input['g-recaptcha-response'];

			$response = $mybb->get_input('h-captcha-response');

			if(!$response || strlen($response) == 0)
{

			if(!$response || strlen($response) == 0)
{

				$this->set_error($lang->invalid_nocaptcha);

				$this->set_error($lang->invalid_hcaptcha);

			}
else
{

			}
else
{

				// We have a noCAPTCHA to handle
// Contact Google and see if our reCAPTCHA was successful

				// We have an hCaptcha or hCaptcha invisible to handle
// Contact hCaptcha and see if our hCaptcha was successful

				$response = fetch_remote_file($this->verify_server, array(

				$response = fetch_remote_file($this->verify_server, array(

					'secret' => $mybb->settings['captchaprivatekey'],

					'secret' => $mybb->settings['hcaptchaprivatekey'],

					'remoteip' => $session->ipaddress,
'response' => $response
));

if($response == false)

					'remoteip' => $session->ipaddress,
'response' => $response
));

if($response == false)

				{
$this->set_error($lang->invalid_nocaptcha_transmit);

				{
$this->set_error($lang->invalid_hcaptcha_transmit);

				}
else
{
$answer = json_decode($response, true);

				}
else
{
$answer = json_decode($response, true);



 
					if($answer['success'] != 'true')
{
// We got it wrong! Oh no...

					if($answer['success'] != 'true')
{
// We got it wrong! Oh no...

						$this->set_error($lang->invalid_nocaptcha);

						$this->set_error($lang->invalid_hcaptcha);

					}
}
}
}

					}
}
}
}



 
		$plugins->run_hooks('captcha_validate_end', $this);

if(count($this->errors) > 0)

		$plugins->run_hooks('captcha_validate_end', $this);

if(count($this->errors) > 0)

Zeile 367Zeile 406
	{
global $db, $mybb, $plugins;


	{
global $db, $mybb, $plugins;


		if($this->type == 1)

		if($this->type == captcha::DEFAULT_CAPTCHA)

		{
// We have a normal CAPTCHA to handle

		{
// We have a normal CAPTCHA to handle

			$imagehash = $db->escape_string($mybb->input['imagehash']);

			$imagehash = $db->escape_string($mybb->get_input('imagehash'));

			if($imagehash)
{
$db->delete_query("captcha", "imagehash = '{$imagehash}'");

			if($imagehash)
{
$db->delete_query("captcha", "imagehash = '{$imagehash}'");