Douglas 6 Denunciar post Postado Dezembro 31, 2007 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¶m2=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¶m2=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¶m2=2&ajsdajsd=adshgads'); ?>"> Envia URL - <strong>?param1=1¶m2=2</strong> </a> <hr> <a href="<?php echo $_SERVER['SCRIPT_NAME']; ?>?<?php echo URL::encode('?param3=1abcde¶m3=eeeee'); ?>"> Envia URL - <strong>?param3=1abcde¶m3=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
David Batista 0 Denunciar post Postado Fevereiro 21, 2008 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
narizgudo 0 Denunciar post Postado Fevereiro 22, 2008 Ae... muito bom, já ateh postei +- a mesma coisa aqui no LAB Depois vou testar melhor seu código =D Compartilhar este post Link para o post Compartilhar em outros sites
David Batista 0 Denunciar post Postado Fevereiro 22, 2008 Douglas Mto bom o codigo consegui pegar as variaveis!!!! Valew mto obrigado ficou otimo!!! Compartilhar este post Link para o post Compartilhar em outros sites
Douglas 6 Denunciar post Postado Fevereiro 22, 2008 Valeu galera. :) Compartilhar este post Link para o post Compartilhar em outros sites
narizgudo 0 Denunciar post Postado Fevereiro 25, 2008 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
Douglas 6 Denunciar post Postado Fevereiro 25, 2008 Eu já tive problemas em tentar passar caracteres especiais via URL. Por isso preferi enviar apenas caracteres alfanuméricos. Compartilhar este post Link para o post Compartilhar em outros sites
jean_c_g 0 Denunciar post Postado Outubro 14, 2008 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