SQL Injection

4

Bom depois de tanto tempo sem postar resolvi voltar com algumas dicas de segurança. Vamos falar um pouco sobre sql injection. É um tipo de ameaça de segurança que se aproveita de falhas em sistemas que interagem com bases de dados via SQL. A injeção de SQL ocorre quando o atacante consegue inserir uma série de instruções SQL dentro de uma consulta (query) através da manipulação das entrada de dados de uma aplicação.
O modo mais simples é a injeção dentro de textbox de login e senha, basta no lugar do login e senha digitar ‘ or 1=’1 e dar enter. Automaticamente o sistema com falha irá logar no primeiro registro. Para amenizar essa situação segue uma função que ajudará a melhorar a segurança.

function anti_injection($frase){
	$array_orig = array('-','+','.',',','*');
	$array_subs = array(' ',' ',' ',' ', ' ');
	$frase = str_replace($array_orig , $array_subs , $frase);
	$frase = ereg_replace('[[:space:]]+', ' ', $frase);
	$frase = trim($frase);
	$frase = strtolower($frase);
 
	if($frase != ''){
		$frase = ereg_replace("[^a-zA-Z0-9_\.\-]", "", strtr($frase, "áŕăâéęíóôőúüçÁŔĂÂÉĘÍÓÔŐÚÜÇ. ,", "aaaaeeiooouucAAAAEEIOOOUUC_-_"));
		return $frase;
	} else {
		return '';
	}
}

Esta função deverá ser chamada sempre que for passada uma variável ao banco de dados seja por GET ou POST. Exemplo:

$variavel = anti_injection($_POST['variavel']);

Aproveitem e abraços.

Arquivos retorno de bancos com php e mysql

11

Olá pessoal esta é a minha primeira postagem com o blog no novo domínio. Para o pessoal que chega aqui procurando sobre arquivos retorno de bancosestá chegando uma novidade. Irei postar no blog os arquivos retorno do banco itaú, banco do Brasil, santander, e também o arquivo remessa da caixa. Aguardem e ctrl+D no blog. Sem mais até a proxima postagem.

Nova versão do Firefox

0

Aos Desenvolvedores fãs da raposa acaba de sair uma versão quentinha deste excelente navegador DOWNLOAD

Exportar estruturas MySql dinamicamente com PHP

0

Após alguns comentarios resolvi dar uma pesquisada para atender a galera seguidora do blog aí vai o codigo:

    <?php
    $host = "";#CONFIGURE SEU HOST AQUI
    $user = "";#USUARIO DO BANCO DE DADOS
    $pass = "";#SENHA DO BANCO DE DADOS
    $db = "";#BASE QUE OS DADOS SERAO EXPORTADOS

    $arquivoSQL = "BasedeDados.txt";#ARQUIVO TXT NO QUAL VOCE QUER GUARDAR OS INSERTS, PODE SER .SQL TAMBÉM
    #SE O ARQUIVO NAO EXISTIR ELE SERÁ CRIADO.

    $clausulaSQL = DumpSQL($host, $user, $pass, $db);#AQUI EU CHAMO A FUNÇAO DumpSQL, QUE GUARDA NA VARIAVEL
    #$clausulaSQL OS DADOS NA FORMA DE INSERT INTO.

    escreveNoTXT($clausulaSQL, $arquivoSQL);#ESCREVE NO ARQUIVO BasedeDados.txt O VALOR DA VARIAVEL $clausulaSQL.

    function escreveNoTXT($consultasSQL, $arquivoSQL){
    //ARQUIVO TXT
    $arquivo = $arquivoSQL;
    //TENTA ABRIR O ARQUIVO TXT
    if (!$abrir = fopen($arquivo,"w")){
    $retorno = "ERRO AO ABRIR";
    }else{
    $retorno = true;
    }
    //ESCREVE NO ARQUIVO TXT
    if (!fwrite($abrir,$consultasSQL)){
    $retorno = "ERRO AO ESCREVER";
    }else{
    $retorno = true;
    }
    //FECHA O ARQUIVO
    fclose($abrir);
    return $retorno;
    }
 
 
    function DumpSQL($host, $user, $pass, $db){
 
    mysql_connect( $host,$user, $pass) or die(mysql_error( ));
    mysql_select_db($db) or die(mysql_error( ));
 
    #mysql_list_tables PEGA TODAS AS TABELAS DA BASE DE DADOS
    $res = mysql_list_tables($db) or die(mysql_error());
 
    while($row = mysql_fetch_row($res)){
    $table = $row[0]; #CADA TABELA DA BASE DE DADOS

    $res3 = mysql_query("SELECT * FROM $table");
    while($r=mysql_fetch_row( $res3)){ #AQUI OCORRE A EXTRAÇAO DOS DADOS DA TABELA
    $sql="INSERT INTO $table VALUES ('";
    $sql .= implode("','",$r);
    $sql .= "');\n";
    $back.=$sql;
    }
    }
    $data = date("d/m/Y");
    $back .= "\n\n--Backup feito em $data";
    mysql_free_result($res);
    return $back;
    }
 
    ?>

Obrigado e até mais pessoal.

Crédito para Rafael Sales

Chuvas Região serrana do Rio de Janeiro.

0

Fica aqui a tristeza deste internauta pela tragédia que está ocorrendo no Rio de Janeiro Tenho muitos visitantes de Petrópolis, Teresópolis e Nova Friburgo. Para quem puder doar procure a cruz vermelha de sua cidade, ninguém sabe quando vai precisar da solidariedade de outras pessoas.
Chego a me emocionar quando vejo os voluntários trabalhando até cavando com as mãos em busca de sobreviventes. Saibam que mesmo de longe(Belém) estamos torcendo por vocês e por suas famílias e que todos possam reconstruir o que perderam. Abraços.

Retirar acentos de uma string (ideal para upload de imagens)

5

Bom pessoal, depois de um tempo sumido voltarei a postar no blog, que já está sendo muito acessado. Um abraço para a galera de São Paulo que são maioria no blog.
Hoje vou postar uma função muito importande e muito procurada pela galera iniciante em PHP, ela retira espaços e caracteres especiais em uma determinada string. Esta função é muito útil em casos de upload de imagens onde a imagem como todos sabemos não pode ter caracteres especiais. Bom sem mais delongas, segue a função.

function retirar_acentos($string){
     $string = ereg_replace("[^a-zA-Z0-9_.]", "", strtr($string, "áàãâéêíóôõúüçÁÀÃÂÉÊÍÓÔÕÚÜÇ ", "aaaaeeiooouucAAAAEEIOOOUUC_"));
     return $string;
}

Para chamar basta usar

$palavra = "Açaí Paraense";
echo retirar_acentos($palavra)//Retorna acai_paraense.

Bom façam bom proveito e até a próxima.

Importação de arquivo Retorno Caixa CEF SIGCB CNAB 240

33

Depois de vários pedidos resolvi postar esta função de importação de arquivo retorno da Caixa Econômica Federal CNAB 240 SIGCB. Esta função insere no banco de dados apenas alguns campos mas estão todos sendo armazenados em variáveis. O código está comentado conforme o layout fornecido pela caixa e dispensa explicações.
Se gostarem comentem.

Seguindo sugestões do amigo Renan de Campinas resolvi completar o post soble arquivo retorno com o formulário de envio.

Crie um formulário com as seguintes especificações e action para o arquivo importa_retorno.php:

Nome do arquivo: Banco de dados

CREATE TABLE IF NOT EXISTS `financeiro` (
  `id_fn` int(11) NOT NULL auto_increment,
  `id_ps` int(11) NOT NULL,
  `vencimento_fn` date NOT NULL,
  `pagamento_fn` date NOT NULL,
  `valor_fn` float NOT NULL,
  `valor_pago_fn` float NOT NULL,
  `multa_fn` float NOT NULL,
  `juros_fn` float NOT NULL,
  `status_fn` varchar(20) character set latin1 collate latin1_general_ci NOT NULL,
  `data_fn` date NOT NULL,
  `hora_fn` time NOT NULL,
  `retorno_fn` varchar(50) NOT NULL,
  `competencia_fn` int(11) NOT NULL,
  PRIMARY KEY  (`id_fn`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Nome do arquivo: config.php

<?php
$host = "localhost";
$user = "usuario";
$pass = "senha";
 
$base = "banco_de_dados";
 
#####################  Conexão com o banco de dados  ################################
$conexao = mysql_connect($host, $user, $pass);
$banco = mysql_select_db($base) or die ("Não foi possível selecionar o Banco de dados.");
?>

Nome do arquivo: form.php

<form action="importa_retorno.php" method="post" enctype="multipart/form-data" name="enviar" id="enviar">
  <label>
    <input type="file" name="arquivo" id="arquivo" />
  </label>
</form>

Nome do arquivo: importa_retorno.php

include_once("config.php");
 
$usuario = $protocolo_ed;
 
$nome = $_FILES['arquivo']['name'];
$type = $_FILES['arquivo']['type'];
$size = $_FILES['arquivo']['size'];
$tmp = $_FILES['arquivo']['tmp_name'];
 
$pasta = "./retorno"; //Nome da pasta onde vao ficar armazenados os arquivos;
 
if($type == 'application/x-ret'){
	if($tmp){
		if(move_uploaded_file($tmp, $pasta."/".$nome)){
			$lendo = @fopen($pasta."/".$nome,"r");
			if (!$lendo){
				echo "Erro ao abrir a URL.";
				exit;
			}
			$i = 0;
			while (!feof($lendo)){
				$i++;
				$linha = fgets($lendo,9999);
				$t_u_segmento = substr($linha,13,1);//Segmento T ou U
				$t_tipo_reg = substr($linha,7,1);//Tipo de Registro
				if($t_u_segmento == 'T'){
					$t_cod_banco = substr($linha,0,3);//Código do banco na compensação
					$t_lote = substr($linha,3,4);//Lote de serviço - Número seqüencial para identificar um lote de serviço.
					$t_n_sequencial = substr($linha,8,5);//Nº Sequencial do registro no lote
					$t_cod_seg = substr($linha,15,2);//Cód. Segmento do registro detalhe
					$t_cod_conv_banco = substr($linha,23,6);//Código do convênio no banco - Código fornecido pela CAIXA, através da agência de relacionamento do cliente. Deve ser preenchido com o código do Cedente (6 posições).
					$t_n_banco_sac = substr($linha,32,3);//Numero do banco de sacados
					$t_mod_nosso_n = substr($linha,39,2);//Modalidade nosso número
					$t_id_titulo_banco = substr($linha,41,15);//Identificação do titulo no banco - Número adotado pelo Banco Cedente para identificar o Título.
					$t_cod_carteira = substr($linha,57,1);//Código da carteira - Código adotado pela FEBRABAN, para identificar a característica dos títulos. 1=Cobrança Simples, 3=Cobrança Caucionada, 4=Cobrança Descontada
					$t_num_doc_cob = substr($linha,58,11);//Número do documento de cobrança - Número utilizado e controlado pelo Cliente, para identificar o título de cobrança.
					$t_dt_vencimento = substr($linha,73,8);//Data de vencimento do titulo - Data de vencimento do título de cobrança.
					$t_v_nominal = substr($linha,81,13);//Valor nominal do titulo - Valor original do Título. Quando o valor for expresso em moeda corrente, utilizar 2 casas decimais.
					$t_cod_banco2 = substr($linha,96,3);//Código do banco
					$t_cod_ag_receb = substr($linha,99,5);//Codigo da agencia cobr/receb - Código adotado pelo Banco responsável pela cobrança, para identificar o estabelecimento bancário responsável pela cobrança do título.
					$t_dv_ag_receb = substr($linha,104,1);//Dígito verificador da agencia cobr/receb
					$t_id_titulo_empresa = substr($linha,105,25);//identificação do título na empresa - Campo destinado para uso da Empresa Cedente para identificação do Título. Informar o Número do Documento - Seu Número.
					$t_cod_moeda = substr($linha,130,2);//Código da moeda
					$t_tip_inscricao = substr($linha,132,1);//Tipo de inscrição - Código que identifica o tipo de inscrição da Empresa ou Pessoa Física perante uma Instituição governamental: 0=Não informado, 1=CPF, 2=CGC / CNPJ, 9=Outros.
					$t_num_inscricao = substr($linha,133,15);//Número de inscrição - Número de inscrição da Empresa (CNPJ) ou Pessoa Física (CPF).
					$t_nome = substr($linha,148,40);//Nome - Nome que identifica a entidade, pessoa física ou jurídica, Cedente original do título de cobrança.
					$t_v_tarifa_custas = substr($linha,198,13);//Valor da tarifa/custas
					$t_id_rejeicoes = substr($linha,213,10);//Identificação para rejeições, tarifas, custas, liquidação e baixas
				}
				if($t_u_segmento == 'U'){
					$t_id_titulo_banco;
					$u_cod_banco = substr($linha,0,3);//Código do banco na compensação
					$u_lote = substr($linha,3,4);//Lote de serviço - Número seqüencial para identificar um lote de serviço.
					$u_tipo_reg = substr($linha,7,1);//Tipo de Registro - Código adotado pela FEBRABAN para identificar o tipo de registro: 0=Header de Arquivo, 1=Header de Lote, 3=Detalhe, 5=Trailer de Lote, 9=Trailer de Arquivo.
					$u_n_sequencial = substr($linha,8,5);//Nº Sequencial do registro no lote
					$u_cod_seg = substr($linha,15,2);//Cód. Segmento do registro detalhe
					$u_juros_multa = substr($linha,17,15);//Jurus / Multa / Encargos - Valor dos acréscimos efetuados no título de cobrança, expresso em moeda corrente.
					$u_desconto = substr($linha,32,15);//Valor do desconto concedido - Valor dos descontos efetuados no título de cobrança, expresso em moeda corrente.
					$u_abatimento = substr($linha,47,15);//Valor do abat. concedido/cancel. - Valor dos abatimentos efetuados ou cancelados no título de cobrança, expresso em moeda corrente.
					$u_iof = substr($linha,62,15);//Valor do IOF recolhido - Valor do IOF - Imposto sobre Operações Financeiras - recolhido sobre o Título, expresso em moeda corrente.
					$u_v_pago = substr($linha,77,15);//Valor pago pelo sacado - Valor do pagamento efetuado pelo Sacado referente ao título de cobrança, expresso em moeda corrente.
					$u_v_liquido = substr($linha,92,15);//Valor liquido a ser creditado - Valor efetivo a ser creditado referente ao Título, expresso em moeda corrente.
					$u_v_despesas = substr($linha,107,15);//Valor de outras despesas - Valor de despesas referente a Custas Cartorárias, se houver.
					$u_v_creditos = substr($linha,122,15);//Valor de outros creditos - Valor efetivo de créditos referente ao título de cobrança, expresso em moeda corrente.
					$u_dt_ocorencia = substr(substr($linha,137,8),4,4).'-'.substr(substr($linha,137,8),2,2).'-'.substr(substr($linha,137,8),0,2);//Data da ocorrência - Data do evento que afeta o estado do título de cobrança.
					$u_dt_efetivacao = substr($linha,145,8);//Data da efetivação do credito - Data de efetivação do crédito referente ao pagamento do título de cobrança.
					$u_dt_debito = substr($linha,157,8);//Data do débito da tarifa
					$u_cod_sacado = substr($linha,167,15);//Código do sacado no banco
					$u_cod_banco_comp = substr($linha,210,3);//Cód. Banco Correspondente compens - Código fornecido pelo Banco Central para identificação na Câmara de Compensação, do Banco ao qual será repassada a Cobrança do Título.
					$u_nn_banco = substr($linha,213,20);//Nosso Nº banco correspondente - Código fornecido pelo Banco Correspondente para identificação do Título de Cobrança. Deixar branco (Somente para troca de arquivos entre Bancos).
 
					$u_juros_multa = substr($u_juros_multa,0,13).'.'.substr($u_juros_multa,13,2);
					$u_desconto = substr($u_desconto,0,13).'.'.substr($u_desconto,13,2);
					$u_abatimento = substr($u_abatimento,0,13).'.'.substr($u_abatimento,13,2);
					$u_iof = substr($u_iof,0,13).'.'.substr($u_iof,13,2);
					$u_v_pago = substr($u_v_pago,0,13).'.'.substr($u_v_pago,13,2);
					$u_v_liquido = substr($u_v_liquido,0,13).'.'.substr($u_v_liquido,13,2);
					$u_v_despesas = substr($u_v_despesas,0,13).'.'.substr($u_v_despesas,13,2);
					$u_v_creditos = substr($u_v_creditos,0,13).'.'.substr($u_v_creditos,13,2);
 
					$data_agora = date('Y-m-d');
					$hora_agora = date('H:i:s');
					$insert = "UPDATE financeiro SET valor_pago_fn='$u_v_pago', pagamento_fn='$u_dt_ocorencia', status_fn='Pago', financ_data_fn='$data_agora', financ_hora_fn='$hora_agora', retorno_fn='$nome' WHERE id_fn='$t_id_titulo_banco'";
					$query = mysql_query($insert);
				}
			}
			fclose($lendo);
		}
	}
}

Lembre-se que deve estar criada no servidor a pasta retorno para que o arquivo possa fazer upload do arquivo de retorno e criar o banco de dados onde será salvo os valores do arquivo. O banco de dados de exemplo é simples podendo somente ser incrementado.

Abraços, qualquer dúvida comentem.

Função que redimensiona imagem dinamicamente

0

Olá galera php maníacos estou voltando agora com uma função criada pelo meu amigo Renato que trabalha comigo na Empredi. Ela redimensiona as imagens usando a galeria GD então observe se ela está instalada.

Bom então vamos lá:

<?php
## $dir = nome do diretório onde deverá ser salva a nova imagem;
## $nome_imagem_original = Nome original da imagem;
## $nome_nova_imagem = NOvo nome que a imagem deverá ser salva;
## $nova_largura = Nova largura da imagem;
## $nova_altura = Nova altura da imagem;
function criar_imagem_dinamicamente($dir,$nome_imagem_original,$nome_nova_imagem,$nova_largura,$nova_altura){
	#Verifica se a imagem existe
	if($nome_imagem_original == ''){
		return false;
	}
 
	#Pega dimensões da Imagem
	list($largura_original,$altura_original,$tipo) = getimagesize($dir.'/'.$nome_imagem_original);
 
	#Cria uma imagem
	fopen($dir.'/'.$nome_nova_imagem, 'w');
 
 
	#Imagem em GIF
	if($tipo == 1){
		$image = imagecreatefromgif($dir.'/'.$nome_imagem_original);
		$image_p = imagecreatetruecolor($nova_largura, $nova_altura);
		imagecopyresampled($image_p, $image, 0, 0, 0, 0, $nova_largura, $nova_altura, $largura_original, $altura_original);
		imagejpeg($image_p, $dir.'/'.$nome_nova_imagem, 100);
	}
 
	#Imagem em JPEG
	if($tipo == 2){
		$image = imagecreatefromjpeg($dir.'/'.$nome_imagem_original);
		$image_p = imagecreatetruecolor($nova_largura, $nova_altura);
		imagecopyresampled($image_p, $image, 0, 0, 0, 0, $nova_largura, $nova_altura, $largura_original, $altura_original);
		imagejpeg($image_p, $dir.'/'.$nome_nova_imagem, 100);
	}
 
	#Imagem em PNG
	if($tipo == 3){
		$image = imagecreatefrompng($dir.'/'.$nome_imagem_original);
		$image_p = imagecreatetruecolor($nova_largura, $nova_altura);
		imagecopyresampled($image_p, $image, 0, 0, 0, 0, $nova_largura, $nova_altura, $largura_original, $altura_original);
		imagejpeg($image_p, $dir.'/'.$nome_nova_imagem, 100);
	}
}
?>

Contador de visitas usando o MySQL

2

Vou mostrar pra vocês como funciona um contador de visitas bem simples usando MySQL.

Esse contador salva no banco de dados as visitas únicas (uniques) e as visualizações de páginas (pageviews) de cada dia. No script também vem uma função que você pode usar para pegar os totais de cada tipo de visitas filtrando por períodos!

Antes de tudo, rode esse código SQL no banco de dados do seu site para criar a tabela que o sistema usa:

DROP TABLE IF EXISTS `visitas`;
CREATE TABLE IF NOT EXISTS `visitas` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `data` date NOT NULL,
  `uniques` int(10) unsigned NOT NULL DEFAULT '0',
  `pageviews` int(10) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `data` (`data`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Agora copie o código desse script PHP e salve-o como contadorVisitas.php em algum diretório do seu site:

/**
 * Sistema de contador de visitas
 *
 * Usado para fazer a contagem de visitas únicas e pageviews diários do site
 *
 * Método de utilização:
 *  Apenas inclua este arquivo no começo do seu site.
 **/
 
 //  Configurações do Script
 // ==============================
 $_CV['registraAuto'] = true;       // Registra as visitas automaticamente?
 
 $_CV['conectaMySQL'] = true;       // Abre uma conexão com o servidor MySQL?
 $_CV['iniciaSessao'] = true;       // Inicia a sessão com um session_start()?
 
 $_CV['servidor'] = 'localhost';    // Servidor MySQL
 $_CV['usuario'] = 'root';          // Usuário MySQL
 $_CV['senha'] = '';                // Senha MySQL
 $_CV['banco'] = 'test';            // Banco de dados MySQL
 
 $_CV['tabela'] = 'visitas';        // Nome da tabela onde os dados são salvos
 // ==============================
 
 // ======================================
 //   ~ Não edite a partir deste ponto ~
 // ======================================
 
 // Verifica se precisa fazer a conexão com o MySQL
 if ($_CV['conectaMySQL'] == true) {
    $_CV['link'] = mysql_connect($_CV['servidor'], $_CV['usuario'], $_CV['senha']) or die("MySQL: Não foi possível conectar-se ao servidor [".$_CV['servidor']."].");
    mysql_select_db($_CV['banco'], $_CV['link']) or die("MySQL: Não foi possível conectar-se ao banco de dados [".$_CV['banco']."].");
 }
 
 // Verifica se precisa iniciar a sessão
 if ($_CV['iniciaSessao'] == true) {
    session_start();
 }
 
/**
 * Registra uma visita e/ou pageview para o visitante
 */
 function registraVisita() {
    global $_CV;
 
    $sql = "SELECT COUNT(*) FROM `".$_CV['tabela']."` WHERE `data` = CURDATE()";
    $query = mysql_query($sql);
    $resultado = mysql_fetch_row($query);
 
    // Verifica se é uma visita (do visitante)
    $nova = (!isset($_SESSION['ContadorVisitas'])) ? true : false;
 
    // Verifica se já existe registro para o dia
    if ($resultado[0] == 0) {
        $sql = "INSERT INTO `".$_CV['tabela']."` VALUES (NULL, CURDATE(), 1, 1)";
    } else {
        if ($nova == true) {
            $sql = "UPDATE `".$_CV['tabela']."` SET `uniques` = (`uniques` + 1), `pageviews` = (`pageviews` + 1) WHERE `data` = CURDATE()";
        } else {
            $sql = "UPDATE `".$_CV['tabela']."` SET `pageviews` = (`pageviews` + 1) WHERE `data` = CURDATE()";
        }
    }
    // Registra a visita
    mysql_query($sql);
 
    // Cria uma variavel na sessão
    $_SESSION['ContadorVisitas'] = md5(time());
 }
 
/**
 * Função que retorna o total de visitas
 *
 * @param string $tipo - O tipo de visitas a se pegar: (uniques|pageviews)
 * @param string $periodo - O período das visitas: (hoje|mes|ano)
 *
 * @return int - Total de visitas do tipo no período
 */
 function pegaVisitas($tipo = 'uniques', $periodo = 'hoje') {
    global $_CV;
 
    switch($tipo) {
        default:
        case 'uniques':
            $campo = 'uniques';
            break;
        case 'pageviews':
            $campo = 'pageviews';
            break;
    }
 
    switch($periodo) {
        default:
        case 'hoje':
            $busca = "`data` = CURDATE()";
            break;
        case 'mes':
            $busca = "`data` BETWEEN DATE_FORMAT(CURDATE(), '%Y-%m-01') AND LAST_DAY(CURDATE())";
            break;
        case 'ano':
            $busca = "`data` BETWEEN DATE_FORMAT(CURDATE(), '%Y-01-01') AND DATE_FORMAT(CURDATE(), '%Y-12-31')";
            break;
    }
 
    // Faz a consulta no MySQL em função dos argumentos
    $sql = "SELECT SUM(`".$campo."`) FROM `".$_CV['tabela']."` WHERE ".$busca;
    $query = mysql_query($sql);
    $resultado = mysql_fetch_row($query);
 
    // Retorna o valor encontrado ou zero
    return (!empty($resultado)) ? (int)$resultado[0] : 0;
 }
 
 if ($_CV['registraAuto'] == true) { registraVisita(); }

Pronto, você já tem a tabela no banco e o script dentro do site, agora é só abrir o script e configurar a conexão do MySQL e/ou desativá-la se necessário. Todas as opções estão com comentários explicativos… Depois disso é só incluir o script no topo do seu site (antes de tudo) que ele já vai começar a contar as visitas pra você.

Quando você quiser pegar o total de visitas é só usar um desses exemplos:

// Pega o total de visitas únicas de hoje
$total = pegaVisitas();
 
// Pega o total de visitas únicas desde o começo do mês
$total = pegaVisitas('uniques', 'mes');
 
// Pega o total de visitas únicas desde o começo do ano
$total = pegaVisitas('uniques', 'ano');
 
// Pega o total de pageviews de hoje
$total = pegaVisitas('pageviews');
 
// Pega o total de pageviews desde o começo do mês
$total = pegaVisitas('pageviews', 'mes');
 
// Pega o total de pageviews desde o começo do ano
$total = pegaVisitas('pageviews', 'ano');

Criptografia no PHP usando Sha512, Whirlpool e Salsa20

2

Hoje trago até vocês os métodos de criptografia Sha512, Whirlpool e Salsa20.

Todos os três são criptografias de alto nível que geram strings de 128 caracteres com chances absurdamente remotas de colisão.

Todos os três são criptografias de mão única, ou seja, a única coisa que você pode fazer com a string depois de criptografada é comparar com outra string para ver as duas são iguais… Não há como “descriptografar” a string gerada por esses algoritmos.

Para usar esses métodos de encriptação você precisará usar a função hash() do PHP.

SHA-512

O SHA-512 é a versão melhorada do SHA-265, que por sua vez é uma versão muito melhor do SHA-1.

Para encriptar uma string usando SHA-512, no PHP, você pode fazer assim:

<?php
 
$string = 'O rato reu a ropa do rei de Roma';
$codificada = hash('sha512', $string);
 
echo "Resultado da codificação usando sha512: " . $codificada;
 
?>

Ao executar o código acima você verá uma string de 128 caracteres, é essa string que você deve salvar no banco de dados para manter a senha realmente segura.

O resultado dessa encriptação com SHA-512 é algo assim (quebrei em três linhas para ficar “legível):

3b1efb1934a56460904a2ae4782490d06057985a1524
5bb887ed4cda89e82cfa3c4ab2589686cb1828228c8e
6d252aa5272cbf1b1ec44978e302d5f7b7cd4641

Whirlpool

O Whirlpool é um pouco mais lento que o SHA-512 e, conseqüentemente, mais “entrópico”, ou seja: mais seguro.

Para encriptar uma string usando Whirlpool, no PHP, você pode fazer assim:

<?php
 
$string = 'O rato reu a ropa do rei de Roma';
$codificada = hash('whirlpool', $string);
 
echo "Resultado da codificação usando whirlpool: " . $codificada;
 
?>

O resultado desse Whirlpool será algo assim:

f13697ecb3e10789449ed839f224376b633eadbe3739
c07c7843bf91a86f4374d3697924e3c396cfeb777b56
d38700c41e032c21c4fce52d5f59024969536c74

Salsa20

E por fim, mas tão poderoso quanto, o Salsa20 é outro algoritmo de encriptação que irá gerar uma string de 128 caracteres. O Salsa20 foi criado para encriptação de stremings/transmissões, mas pode ser usado com strings simples também.

Para encriptar uma string usando Salsa20, no PHP, você pode fazer assim:

<?php
 
$string = 'O rato reu a ropa do rei de Roma';
$codificada = hash('salsa20', $string);
 
echo "Resultado da codificação usando salsa20: " . $codificada;
 
?>

O resultado desse Salsa20 será algo assim:

56a296fad140971d0fcd1577bd0c66348e69a835e9f4
56857a0e9f43e8fe540ad4488099875daaf8741df89f9
6abb8c6cd08ed842db33b2ea356737fc2cb0aef

Salvando esses dados no banco de dados

Para salvar esse tipo de dado [criptografado] você pode usar um campo CHAR(128) pois sabemos que sempre teremos 128 caracteres ali.

Encontrando registros criptografados no banco de dados

Suponhamos que você queira encontrar um usuário no seu banco de dados comparando a senha digitada (no formulário de login) com a senha armazenada utilizando o método Whirlpool.

O código PHP para montar a consulta SQL seria mais ou menos assim:

<?php
 
$usuario = 'jefferson'; // Nome do usuario (digitado pelo usuario)
$senha = '12345'; // Senha (digitada pelo usuario)
 
// Encripta a senha utilizando Whirlpool
$whirlpool = hash('whirlpool', $senha);
 
$sql = "SELECT * FROM `usuarios` WHERE `usuario` = '{$usuario}' AND BINARY `senha` = '{$whirlpool}'";
 
?>

fonte:
Thiago Belém

Go to Top