Clicky

Ir para conteúdo

Posts Recomendados

Abaixo segue um Código que parace seguro até que o conheça e faça valer o contrário.

<?php

include("conexao.php");

$login = "admin";

$senha = "********";

$busca = "SELECT * FROM tabelaLogin WHERE login = '$login' OR 1 and senha = '$senha'";

$busca = "SELECT * FROM tabelaLogin WHERE login = 'admin' OR 1 and senha = '********'";

// ateh aqui pode se observar que esta tudo ok

// o autenticacao vai acontecer normalmente pois foi fornecido o login e a senha de forma correta

//-------------------------------------------------------------------------------------------------------------------------

// mais digamos que eu nao tenha a senha e use o login = "admin" entao eu ja tenho 50 porcento de chance e

// agora soh falta advinhar a senha certo ?

// R: ERRADO se o site esta vuneravel a Injecao SQL eu praticamente ja tenho 100 porcento.

$login = "admin";

$senha = "' or '1=1";

$busca = "SELECT * FROM tabelaLogin WHERE login = '$login' OR 1 and senha = '$senha'";

$busca = "SELECT * FROM tabelaLogin WHERE login = 'admin' OR 1 and senha = '' or '1=1'";

// por Logica o que se pode observar eh admin E nada OU 1 = true

// V E F OU V = V

// a busca vai retorna verdadeiro o seja Logado como ADMIN

// isso para facil porque ja tem o login = admin, na verdade login nem eh necessario

$login = "' or '1=1";

$senha = "' or '1=1";

$busca = "SELECT * FROM tabelaLogin WHERE login = '$login' OR 1 and senha = '$senha'";

$busca = "SELECT * FROM tabelaLogin WHERE login = '' or '1=1' OR 1 and senha = '' or '1=1'";

// por logica denovo nada OU 1 E nada OU 1 = true

// F OU V E F OU V = V

// denovo Logado sem a necessidade de nenhum dado de acesso

//-------------------------------------------------------------------------------------------------------------------------

Uma forma bastante que ajuda eh limitar no formulario o tamanho dos campos Login e Senha

Outra maneira que realmente funciona eh filtrar todos dados retirando aspas simples, duplas, espacos em branco

barras e tudo que nao seja digito e numero antes de inseri-los em uma busca sql.

// retira os codigos html do login e retira as aspa simples

$login = str_replace("'","",strip_tags($login));

// retira os codigos html da senha, retira as aspa simplese criptografa antes de compara-la no banco de dandos

$senha = crypt(str_replace("'","",strip_tags($senha)));

//Agora sim pode se dizer que o codigo esta um pouco seguro

Feito pela PhpBrasil

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bacana tuas dicas Rodrigo,

Injection é um problema muito sério que está ocorrendo hoje, como XSS também que é um técnica de injeção de cros-site-scripting.

Criar um sistema que seja resistente a essas técnicas não é uma tarefa fácil, não é somente usando


strip_tags()

mysql_real_escape_string()

...

.

Eu quando prestando consultoria em desenvolvimento utilizo ou aconcelho a utilização de um Framework, seja PHP, Python, Ruby e mais, os frameworks já vem praparados pra essas situações, precisando apenas ligar/desligar.

Como a maioria aqui desenvolve PHP segue uma dica de framework http://codeigniter.com/ tem uma curva de aprendizado muito curta e oferece recursos fantásticos.

Fica a dica.....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Todas essas funções acabam modificando o que é inserido, francamente, usar str_replace ou strip_tags é um absurdo. O código abaixo preserva totalmente o que é inserido.


function anti_sql_injection($str) {

	if (!is_numeric($str)) {

		$str = get_magic_quotes_gpc() ? stripslashes($str) : $str;

		$str = function_exists('mysql_real_escape_string') ? mysql_real_escape_string($str) : mysql_escape_string($str);

	}

	return $str;

}

ai é só chamar a função, exemplo

$form_nome = anti_sql_injection($_POST['nome']);

E se o valor for em números

$form_cpf = (INT)$_POST['cpf'];


Compartilhar este post


Link para o post
Compartilhar em outros sites

Apenas mysql_real_escape_string()

então eh soh fazer isso:

$senha = mysql_real_scape_string($senha);

$usuario = mysql_real_scape_string($usuario);

?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.



O Portal do Host

Dicas para sua empresa de hospedagem. Artigos, notícias, tutoriais e os aspectos da indústria de hospedagem.

Limestone Networks

A LSN tem sido parceira e patrocinadora do PDH, fornecendo uma plataforma segura e confiável.

Cloud - Servidores decicados - Co-location
×
×
  • Criar Novo...