Ir para conteúdo

POWERED BY:

Arquivado

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

Douglas

Codifica / Decodifica parâmetros de URL

Recommended Posts

Galera..

 

Desenvolvi uma nova versão de um script que eu tinha desenvolvido para proteção de parametros de URL.

 

 

A classe

<?php
/** 
* -------------- EXPERIMENTAL -------------- 
* Codifica / Decodifica parametros de URL
*
* O objetivo dessa classe é aumentar a segurança na passagem de 
* parametros de URL ($_GET), codificando todos os parametros.
* 
* 
* --
* include: md5_encript(), md5_decript(), get_rnd_iv();
* URL: [url="http://br2.php.net/manual/pt_BR/function.md5.php#43696"]http://br2.php.net/manual/pt_BR/function.md5.php#43696[/url]
* --
*  
* Utilizando:
* 	- Decodicando: 
* 		- No inicio de cada página, chamar a função <?php URL::decode(); ?> para a decodificar os parametros de URL
* 	- Codificando:
* 		- <a href="pagina.php?<?php echo URL::encode('?param1=1&param2=2'); ?>">String</a>
* 
* 
* @author Douglas Brito de Medeiros <douglas.web@gmail.com>
* @version 0.1 
* @access public  
*/ 
class URL {
	/** 
	* Chave de codificação/decodificação
	* @access private
	* @name $key 
	*/ 
	private static $key = '123456789abcd';
	
	/** 
	* Tamanho da string 
	* @access private
	* @name $key 
	*/
	private static $size = 16;
	
	/** 
	* Codifica 
	* @access static
	* @param String $string
	* @return string 
	* 
	* URL::encode('param1=1&param2=2')
	* 
	*/
	static function encode($string)
	{
		$string = gzcompress($string) . "\x13";
		$n = strlen($string);

		if($n % 16)
		{
			$string .= str_repeat("\0", 16 - ($n % 16));
		}
		
		$i = 0;
		$enc_text = self::randomize();
		$iv = substr(self::$key ^ $enc_text, 0, 512);
		
		while ($i < $n)
		{
			$block = substr($string, $i, 16) ^ pack('H*', md5($iv));
			$enc_text .= $block;
			$iv = substr($block . $iv, 0, 512) ^ self::$key;
			$i += 16;
		}
		
		return urlencode(base64_encode(base64_encode($enc_text)));
	}
	
	/** 
	* Decodifica 
	* @access static
	* @return void
	* 
	* URL::decode()
	*  
	*/
	static function decode()
	{
		$string = $_SERVER['QUERY_STRING'];
		
		if(strlen($string) > 0)
		{
			$string = base64_decode(base64_decode($string));
			$n = strlen($string);
			$i = self::$size;
			$plain_text = '';
			$iv = substr(self::$key ^ substr($string, 0, self::$size), 0, 512);
			
			while ($i < $n)
			{
				$block = substr($string, $i, 16);
				$plain_text .= $block ^ pack('H*', md5($iv));
				$iv = substr($block . $iv, 0, 512) ^ self::$key;
				$i += 16;
			}
			
			$plain_text = @gzuncompress( preg_replace( '/\\x13\\x00*$/' , '' , $plain_text ) );
			
			if( !$plain_text )
			{
				exit("A URL informada é inválida!");
			}

			$url = parse_url(urldecode( $plain_text ) );
			$parametros = explode("&", $url['query']);
			
			for($i = 0; $i < count($parametros); $i++)
			{
				$valor = explode("=", trim( urldecode( strip_tags( $parametros[$i] ) ) ) );
				$_GET[ $valor[0] ] = $valor[1];
			}
			
			unset( $_GET[ urldecode($_SERVER['QUERY_STRING']) ] );
		}
	}
	
	/** 
	* Gera uma string randomica
	* @access static
	* @return string
	* 
	* URL::randomize()
	*  
	*/
	private static function randomize()
	{
		$iv = '';
		$i = 0;
		while($i < self::$size)
		{
			$iv .= chr(mt_rand() & 0xff);
			$i++;
		}
		return $iv;
	}
}
?>

Usando

<?php
	require_once('url.class.php');
	URL::decode();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Codifica / Decodifica</title>
</head>
<body>
	<p>
		<a href="<?php echo $_SERVER['SCRIPT_NAME']; ?>?<?php echo URL::encode('?param1=1&param2=2&ajsdajsd=adshgads'); ?>">
			Envia URL - <strong>?param1=1&param2=2</strong>
		</a>
	   
	   <hr>
		
	   <a href="<?php echo $_SERVER['SCRIPT_NAME']; ?>?<?php echo URL::encode('?param3=1abcde&param3=eeeee'); ?>">
			Envia URL - <strong>?param3=1abcde&param3=eeeee</strong>
	   </a>
	</p>

	<p>--------------------------------------------------</p>  
	<?php
		foreach($_GET as $nome => $valor)
		{
			printf("<p><strong>\$_GET['%s']</strong> = %s</p>", $nome, $valor);
		}
	?>
</body>
</html>

 

Gostaria de sugestões e atualizações no script, para ficar cada vez melhor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Douglas

 

O codigo ficou otimo!!!!

Gostaria de pedir uma ajuda com ele tipo eu quero passar uma id via url ate ai beleza mais como q eu faço para pegar o valor decodificado???

qual é a variavel???/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apenas para constar como pesquisa ^^

 

A função gzdeflate gera uma string menor do que a gzcompress, apenas 5 ou 6 caracteres de diferença...

mas quem sabe um dia ele pode vir a ser a diferença ^^

 

String: Pullulo edo Lugo in lex Edoctus capio concedo ictus

array(4) {
  ["fun"]=>
  string(11) "gzdeflate()"
  ["cod"]=>
  string(49) "(ми)миWHMиWП)MоWхлSхI╜PpMиO.)-VHN,хлWHноK╘х┴"
  ["tam"]=>
  int(49)
  ["inf"]=>
  string(51) "Pullulo edo Lugo in lex Edoctus capio concedo ictus"
}

array(4) {
  ["fun"]=>
  string(12) "gzcompress()"
  ["cod"]=>
  string(55) "x°(ми)миWHMиWП)MоWхлSхI╜PpMиO.)-VHN,хлWHноK╘х┴АУц"
  ["tam"]=>
  int(55)
  ["inf"]=>
  string(51) "Pullulo edo Lugo in lex Edoctus capio concedo ictus"
}

Se você usar FORCE_DEFLATE (gzdeflate), você obtém uma string comprimida padrão zlib (incluindo os cabeçalhos zlib) após o cabeçalho do arquivo gzip mas sem a somatória crc32 ao final.

 

http://www.php.net/gzencode

http://www.php.net/gzdeflate

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou tentando pegar os parametros vindo do mysql que é o id do produto.

$numero = $row["idproduto"];

 

me traz isso;

 

 

$_GET['param1'] = $numero

 

 

e teria que vir $_GET['param1'] = 2

 

 

 

 

se alguem souber agradeço

obrigado a todos

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.