Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ezequiel2

[Resolvido] Manipulando, serializando e criptografando cookies ao

Recommended Posts

Com a classe abaixo você serializa e criptografa seus cookies, e ele deserializa e descriptografa seus cookies automaticamente.

<?php

class cookies {
	
	var $encript_cookie_key;
	var $has_cookies_enabled = false;
	var $last_insertation;
	var $domain;
	var $data = array();

	function cookies($key = "abcde1234") {
		global $_COOKIE;
		$this->encript_cookie_key = $key;
		$this->data = array_map(array(&$this, "maybe_decript"), $_COOKIE);
		foreach($this->data as $k=>$v) $this->$k = $v;
		$_COOKIE = $this->data;
		preg_match("/([\.]+)(.*)/i", $_SERVER["HTTP_HOST"], $domain);
		$this->domain = $domain[0];
		if(!$this->has_cookies_enabled()) return;
		else $this->has_cookies_enabled = true;
		
	}
	
	function has_cookies_enabled() {
		global $_COOKIE;
		if($this->has_cookies_enabled)
				return true;
		if(ini_get("session.use_cookies")) {
			if(!$_COOKIE[ini_get("session.name")]) {
				setcookie(ini_get("session.name"), session_id(), 0, "/", ini_get("session.cookie_domain"));
				return (isset($_COOKIE[ini_get("session.name")]));
			}
			return true;
		} else {
			if(!$_COOKIE[ini_get("session.name")]) {
				setcookie(ini_get("session.name"), session_id(), 0, "/", ini_get("session.cookie_domain"));
				return (isset($_COOKIE[ini_get("session.name")]));
			}
			return true;
		}
		return false;
	}
	
	function change_encript_key($key) {
		$this->encript_cookie_key = $key;
	}
	
	function set($name, $value, $expire = 0, $base64 = true, $encript = true, $path = "/", $domain = "", $secure = false, $httponly = false) {
		if(!$domain) $domain = $this->domain;
		if(setcookie($name, $this->encript($value, $base64, $encript), $expire, $path, $domain, $secure, $httponly)) {
		$this->$name = $value;
		$this->data[$name] = $value;
		$this->last_insertation = $name;
		global $_COOKIE;
			if(isset($_COOKIE[$name])) {
				$_COOKIE[$name]	= $this->maybe_decript($_COOKIE[$name]);
			}
		return true;	
		}
		return false;
	}
	
	function remove($name, $path = "/", $domain = "") {
		global $_COOKIE;
		unset($this->$name);
		unset($this->data[$name]);
		unset($_COOKIE[$name]);
		if(!$domain) $domain = $this->domain;
		setcookie($name, "", time() - 3600, $path, $domain);
	}
	
	function clean() {
		if(!$this->has_cookies_enabled()) return;
		foreach($this->data as $name => $value)
			$this->remove($name);
	}
	
	function encript($string, $base64 = true, $encript = true) {
		$string = $this->maybe_serialize($string);
		if($encript) {
		if(function_exists("mcrypt_encrypt")) :
		$iv_size = mcrypt_get_iv_size(MCRYPT_XTEA, MCRYPT_MODE_ECB);
		$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
		$result = mcrypt_encrypt(MCRYPT_XTEA, $this->encript_cookie_key, $string, MCRYPT_MODE_ECB, $iv);
		else :
		$result = '';
		for($i=1; $i<=strlen($string); $i++) :
		  $char = substr($string, $i-1, 1);
		  $keychar = @substr($this->encript_cookie_key, ($i % strlen($this->encript_cookie_key))-1, 1);
		  $char = chr(ord($char)+ord($keychar));
		  $result.=$char;
		endfor;
		endif;
		$inc = $result.substr(md5($string), 0, 5);
		} else {
		$inc = 	$string;
		}
		if($base64) $inc = substr(md5($inc), 0, 4).base64_encode($inc);
		return trim($inc);
	}
	
	function maybe_decript($string) {
		$string = $this->base54_decript($string);
		$md5 = substr($string, -5);
		$encript = substr($string, 0, -5);
		if(function_exists("mcrypt_encrypt")) :
		$iv_size = mcrypt_get_iv_size(MCRYPT_XTEA, MCRYPT_MODE_ECB);
		$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
		$result = rtrim(mcrypt_decrypt(MCRYPT_XTEA, $this->encript_cookie_key, $encript, MCRYPT_MODE_ECB, $iv), "\0\4");
		else :
		$result = '';
		for($i=1; $i<=strlen($encript); $i++) :
		  $char = substr($encript, $i-1, 1);
		  $keychar = @substr($this->encript_cookie_key, ($i % strlen($this->encript_cookie_key))-1, 1);
		  $char = chr(ord($char)-ord($keychar));
		  $result.=$char;
		endfor;
		endif;
		if($md5 != substr(md5($result), 0, 5))
			return $this->maybe_unserialize($string);
		return $this->maybe_unserialize($result);
	}
	
	function base54_decript($string) {
		$md5 = substr($string, 0, 4);
		$string2 = base64_decode(substr($string, 4));
		if($md5 != substr(md5($string2), 0, 4))
			return $this->maybe_unserialize($string);
		return $string2;
	}
	
	function maybe_serialize($var) {
		return maybe_serialize($var);
	}
	
	function maybe_unserialize($var) {
		return maybe_unserialize($var);
	}
	
}


if(!function_exists("maybe_unserialize")) :
function maybe_unserialize( $original ) {
	if ( is_serialized( $original ) ) // don't attempt to unserialize data that wasn't serialized going in
		if ( false !== $gm = @unserialize( $original ) )
			return $gm;
	return $original;
}
endif;

if(!function_exists("is_serialized")) :
function is_serialized( $data ) {
	// if it isn't a string, it isn't serialized
	if ( !is_string( $data ) )
		return false;
	$data = trim( $data );
	if ( 'N;' == $data )
		return true;
	if ( !preg_match( '/^([adObis]):/', $data, $badions ) )
		return false;
	switch ( $badions[1] ) {
		case 'a' :
		case 'O' :
		case 's' :
			if ( preg_match( "/^{$badions[1]}:[0-9]+:.*[;}]\$/s", $data ) )
				return true;
			break;
		case 'b' :
		case 'i' :
		case 'd' :
			if ( preg_match( "/^{$badions[1]}:[0-9.E-]+;\$/", $data ) )
				return true;
			break;
	}
	return false;
}
endif;

if(!function_exists("is_serialized_string")) :
function is_serialized_string( $data ) {
	// if it isn't a string, it isn't a serialized string
	if ( !is_string( $data ) )
		return false;
	$data = trim( $data );
	if ( preg_match( '/^s:[0-9]+:.*;$/s', $data ) ) // this should fetch all serialized strings
		return true;
	return false;
}
endif;

if(!function_exists("maybe_serialize")) :
function maybe_serialize( $data ) {
	if ( is_array( $data ) || is_object( $data ) )
		return serialize( $data );

	if ( is_serialized( $data ) )
		return serialize( $data );

	return $data;
}
endif;

$cookies = new cookies();

if($cookies->has_cookies_enabled) {
$cookies->set("colors", array("blue", "red", "brown"));
print_r($cookies->data["colors"]);
print_r($cookies->colors);
print_r($_COOKIE["colors"]);
} else {
die("you don't have cookies enabled!");	
exit;
}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.