Ir para conteúdo

Arquivado

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

voopys

Como proteger $variável contra "require" externo?

Recommended Posts

Olá pessoal depois de muito pesquisar resolvi me escrever para tirar uma duvida com as mentes desenvolvidas nesse fórum, vamos lá: acontece que tenho uma pagina em PHP chamada senha.php que existe a apenas os dados:

 

<?php $senha = 'senhaaqui'; ?>

 

e tenho outra pagina chamada pegasenha.php onde tem os seguintes dados:

 

<?php require ("senha.php");?>

<?php echo $senha; ?>

 

A pergunta é fácil porem eu não consigo ter certeza: vamos supor que algum de vocês queira roubar a senha de acesso, como vocês tendo apenas o meu endereço da senha.php exemplo www.meusite.com.br/senha.php conseguirão imprimir os dados contidos dentro da variável $senha e descobrir qual é a senha?
Para ficar mais claro resolvi colocar uma pagina senha.php e desafio que algum de vocês consigam descobrir a senha que esta dentro da variável $senha , o endereço é: http://www.wiltecmg.com.br/senha.php , e depois por gentileza diga como conseguiu descobrir qual era a senha.
Um abraço a todos e é um prazer disafia-los!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está com uma visão completamente distorcida em relação a proteção de dados.

Oi Diogo, não estou querendo proteger os dados mais sim apenas saber o quanto um simples código pode se descoberto por pessoas com mais "inteligencia", gostaria de saber se é possível a descoberta dessa variável?

Compartilhar este post


Link para o post
Compartilhar em outros sites

saber o quanto um simples código pode se descoberto por pessoas com mais "inteligencia", gostaria de saber se é possível a descoberta dessa variável?

 

É também uma questão de "inteligência" saber que o PHP é executado no servidor, por isso, é impossível ver variáveis no navegador.

 

Não é o armazenamento o problema e sim a criptografia php.net/crypt

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo voopys. Minha única dúvida é por que você mantém um valor fixo nessa variável.

Por que não guardar a senha em um DB e criptografada? Depois bastará executar a query que comparará a senha informada no site com a que está gravada no banco de dados.

### Tabela com as senhas e usuarios
CREATE TABLE usuarios(
 id SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
 nome VARCHAR(20) NOT NULL,
senha CHAR(128) NOT NULL,
 PRIMARY KEY (id)
) TYPE InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

 

Depois você alimenta essa tabela;

<?php
$user = lucascardial;
$senhaAberta = 123456;
$senhaCodificada = md5($senhaAberta);
// a senha será codificada para: e10adc3949ba59abbe56e057f20f883e;

$sql = "INSERT IN TO `usuarios` (`nome`, `senha`) VALUES ('$user', '$senhaCodificada')";
mysqli_query($sql);

?>

e por fim, você pode trazer a senha da database que estará criptografada, comparando com a senha informada.

<?php
$senhaGet = 123456;
$senhaInformada = md5($senhaGet);
//consulta o banco de dados se existe algum registro com o mesmo valor da senha informada.
$sql = "SELECT `nome`, `senha` FROM usuarios WHERE `senha` = '$senhaInformada'";
$consulta = mysqli_query($sql);
$vetor = mysqli_fetch_array($consulta);
$senha = $vetor["senha"];
//E por fim, pode fazer uma simples condição:
if($senha != $senhaInformada){echo "Senha inválida"; exit;} else{ echo "Senha correta";}


?>

Bem, de toda forma se isso não for o que você procura, atente as dicas dos outros usuários: criptografe sua senha. Assim, mesmo que alguém consiga por algum meio descobrir o valor de sua senha, não poderá compreender o valor real.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

É também uma questão de "inteligência" saber que o PHP é executado no servidor, por isso, é impossível ver variáveis no navegador.

 

Não é o armazenamento o problema e sim a criptografia php.net/crypt

Diogão eu sou bem leigo a respeito do PHP e confesso que sou bem "desinteligente" então uma pergunta simples existe alguma maneira de você ou alguma pessoa "facilmente" descobrir essa variável? não entendo sobre criptografia, só gostaria de saber o caminho que uma pessoa vai ter que seguir até chegar a descoberta da variável...desculpe pela "burrice".

Compartilhar este post


Link para o post
Compartilhar em outros sites

voopys, entenda que:

O PHP é uma linguagem que roda no servidor (Máquina onde está hospedado seu site);

Digamos que nativamente é impossível alguém descobrir o valor de sua variável. O que pode ocorrer é você deixar alguma brecha na troca de informações, ai sim isso poderá complicar.

Porém no comando:

<?php $senha="123456"?>

É impossível descobrir o valor.

Uma boa criptografia é a md5.

Para isso basta usar desta forma:

$criptografar = "Lucas";

$criptografado = md5($criptografar);

Compartilhar este post


Link para o post
Compartilhar em outros sites

MD5 não foi criado para criptografia

$password = '123';

$salt_length = 16;

$salt_prefix = '2a';

/**
* Proteção contra milhões de tentativas
*/
$cost = '08';

$salt = strtr(
    base64_encode(
        mcrypt_create_iv($salt_length, MCRYPT_DEV_URANDOM)
    ), 
'+', '.');

$salt = str_replace('=', null, $salt);

$hash = crypt($password, '$'. $salt_prefix .'$' . $cost . '$' . $salt . '$');

Salve $hash em um banco de dados ou como vc não sabe trabalhar com bancos, faça um teste salvando até mesmo neste seu arquivo senha.php

 

Para testar é muito simples

if (crypt($password, $hash) == $hash) {
    // Senha correta
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na realidade é possível sim fazer um include ou require de um arquivo externo (URL), mas para isso você teria de alterar a opção allow_url_include do PHP que por padrão está desativada. Não é recomendado ativar ela a não ser que você saiba o que está fazendo.

 

Sobre criptografar sua senha, use a função do próprio PHP pra isso:

http://au2.php.net/manual/pt_BR/function.password-hash.php

 

Sobre a pessoa ver o conteúdo do seu arquivo, isso só será possível se você der um ECHO, ou se você não configurar o apache para interpretar o arquivo, caso isso aconteça o APACHE vai exibir o conteudo do arquivo no navegar, acontece muito isso com arquivos .inc.

http://goo.gl/79gbIY

 

Lembre de desativar o register_globals que pode causar algumas brechas de segurança

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sobre criptografar sua senha, use a função do próprio PHP pra isso:

http://au2.php.net/manual/pt_BR/function.password-hash.php

 

Ainda é cedo para usar password_hash quase todos os hosts compartilhados ainda estão no PHP 5.3, o exemplo acima é compatível, ou seja, password_hash da suporte para crypt, deixando-nos aliviados em continuar usando crypt até que estejamos seguros de que o PHP 5.5 está em uso geral.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera gostaria de agradecer de Coração a ajuda de todos, Diogo,ExtremsX,Lucas pela ajuda vcs não sabem a mão que estão dando a mim e a um monte de pessoas iniciantes que vão ver esse post então resumindo eu entendi que:

 

Ninguem consegue dar um incluide ou requere externamente "desde que " eu altere a opção allow_url_include

no meu php , aprendi que a melhor forma de guardar as $variaveis com senha é criptografando-as mais afinal posso ou não utilizar o md5 me pareceu mais fácil utiliza-la do que o password_hash? e para por fim a esse topico e que para todos que lerem esse tópico:

 

É POSSÍVEL DAR INCLUIDE OU REQUIRE EXTERNO E PEGAR UMA VARIÁVEL QUE ESTEJA FORA DO MEU SERVIDOR?

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Ainda é cedo para usar password_hash quase todos os hosts compartilhados ainda estão no PHP 5.3, o exemplo acima é compatível, ou seja, password_hash da suporte para crypt, deixando-nos aliviados em continuar usando crypt até que estejamos seguros de que o PHP 5.5 está em uso geral.

 

Verdade, caso você ache complicado usar a biblioteca Crypt você pode usar combinações de hash, como:

md5(sha1($senha) . 'qualquer coisa estática aqui') 

Isso já traz uma segurança enorme para sua aplicação (esse codigo é aleatório), lembre de forçar os usuários a usarem senha de no minimo 8 dígitos que contenham combinações de letras e numero.

 

Galera gostaria de agradecer de Coração a ajuda de todos, Diogo,ExtremsX,Lucas pela ajuda vcs não sabem a mão que estão dando a mim e a um monte de pessoas iniciantes que vão ver esse post então resumindo eu entendi que:

 

Ninguem consegue dar um incluide ou requere externamente "desde que " eu altere a opção allow_url_include

no meu php , aprendi que a melhor forma de guardar as $variaveis com senha é criptografando-as mais afinal posso ou não utilizar o md5 me pareceu mais fácil utiliza-la do que o password_hash? e para por fim a esse topico e que para todos que lerem esse tópico:

 

É POSSÍVEL DAR INCLUIDE OU REQUIRE EXTERNO E PEGAR UMA VARIÁVEL QUE ESTEJA FORA DO MEU SERVIDOR?

 

Como eu disse, sim é possível usando allow_url_include

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.