• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/rsasecurity.php
  • Класс: CRsaSecurity
  • Вызов: CRsaSecurity::AcceptFromForm
public function AcceptFromForm($arParams)
{
	if(!$this->provider)
		return self::ERROR_NO_LIBRARY; //no crypto library found

	$data = $_REQUEST['__RSA_DATA'];

	unset($_POST['__RSA_DATA']);
	unset($_REQUEST['__RSA_DATA']);
	unset($GLOBALS['__RSA_DATA']);

	if($data == '')
		return self::ERROR_EMPTY_DATA; //no encrypted data

	if(mb_strlen($data) >= self::MAX_ENCRIPTED_DATA)
		return self::ERROR_BIG_DATA; //too big encrypted data

	$data = $this->provider->Decrypt($data);
	if($data == '')
		return self::ERROR_DECODE; //decoding error

	$data1 = mb_substr($data, 0, -47);
	$sha1 = mb_substr($data, -40);

	if($sha1 <> sha1($data1))
  		return self::ERROR_INTEGRITY; //integrity check error

	parse_str($data, $accepted_params);
	if($accepted_params['__RSA_RAND'] == '')
		return self::ERROR_SESS_VALUE; //no session control value

	$session = BitrixMainApplication::getInstance()->getSession();

	if($accepted_params['__RSA_RAND'] <> $session['__STORED_RSA_RAND'])
		return self::ERROR_SESS_CHECK; //session control value does not match

	CUtil::decodeURIComponent($accepted_params);
	foreach($arParams as $k)
	{
		if(isset($accepted_params[$k]))
		{
			if(is_array($accepted_params[$k]))
			{
				foreach($accepted_params[$k] as $key=>$val)
					$GLOBALS[$k][$key] = $_REQUEST[$k][$key] = $_POST[$k][$key] = $val;
			}
			else
			{
				$GLOBALS[$k] = $_REQUEST[$k] = $_POST[$k] = $accepted_params[$k];
			}
		}
	}

	return 0; //OK
}