Ir para conteúdo

POWERED BY:

Arquivado

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

brhvitor6

[Opnião] Segurança de codigo

Recommended Posts

Fala galera, beleza?

 

Preciso da opnião de vocês sobre a segurança do meu codigo e estrutura.... obg

 

<?php
include('pdo.php');
include('String.php');
include('ssl.php');

$SSL = new ssl;
$MySql = new PdoAnalitc;
$String = new StringProt;

//verifica campos
if(isset($_POST['login']))
{
$login = $String->StringSemAcentos($_POST['login']);
}else die('preencha o campo login');
if(isset($_POST['senha']))
{
$senha = $String->StringSemAcentos($_POST['senha']);
}else die('preencha o campo senha');

//conecta ao banco
echo $MySql->Connect("vitor","vitor","localhost","intranet");

//criptografia da senha (??) mas primeiro é neccessario testar se existe alguma coisa no banco por causa do IV
$query = $MySql->NumRows("SELECT * FROM usuarios WHERE login = '$login'");
if($query == 1) //se for exatamente 1 (e não mais)
{
$array = $MySql->FeatchArray("SELECT * FROM usuarios WHERE login = '$login'");
$iv = base64_decode($array['PassHs']);
}else die('Login ou senha incorretos');
//Criptografa com o IV recebido do banco
$senha = base64_encode($SSL->Encrypt($senha,'123',$iv));
//Compara senha no banco de dados
$query = $MySql->NumRows("SELECT * FROM usuarios WHERE login = '$login' AND senha = '$senha'");
if($query == 1)
{
$array = $MySql->FeatchArray("SELECT * FROM usuarios WHERE login = '$login' AND senha = '$senha'");
$_SESSION['login'] = base64_encode($SSL->Encrypt($login,'123',$iv));
$_SESSION['controle'] = $iv;
die("Ok... não é o pior codigo que eu ja vi na internet");
}else die("Login ou senha incorreto");
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não está seguro, pois você está usando dados vindo por $_POST direto em querys, sem filtrá-lo antes.

Use essa função para filtrar os dados vindo por post ou get:

 

 

function protect( $str ){
	/**
	 * Função para retornar uma string protegida contra SQL/Blind/XSS Injection 
	 * @param Mixed str
	 * @access public
	 * @return string
	 */
	 	if( !is_array( $str ) ) {			
			$str = preg_replace('~([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $str);
			$str = preg_replace('~([0-9]+);~e', 'chr("\\1")', $str);
			$str = str_replace("<script","",$str);
			$str = str_replace("script>","",$str);
			$str = str_replace("<Script","",$str);
			$str = str_replace("Script>","",$str);
			$str = trim($str);
			$tbl = get_html_translation_table(HTML_ENTITIES);
			$tbl = array_flip($tbl);
			$str = addslashes($str);
			$str = strip_tags($str);
			return strtr($str, $tbl);
		} 
		else return $str;
	}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

só para completar o amigo.

 

Não está seguro, pois você está usando dados vindo por $_POST direto em querys, sem filtrá-lo antes.

 

eu sei que com GET nós conseguimos com certa facilidade fazer consultas e etc..

creio que no POST apesar de mais seguro da pra se fazer a mesma coisa caso você não filtre podemos mandar valor como

 

1=1

 

fazendo com o que o código retorne true e quando retorna true normalmente você consegue logar, dai é meio passo para ferrar o restante do site.

 

um dica valiosa é que a segurança nem sempre ta no code e sim no server.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Provavelmente você está usando PDO, então filtre-as com bindParam ou bindValue:

EXEMPLOS:

$sql = $pdo->prepare("SELECT * FROM `tabela` WHERE `id` = :id");
$sql->bindValue(':id', $_GET['id'], PDO::PARAM_INT);
$sql->execute();

$sql = $pdo->prepare("SELECT * FROM `tabela` WHERE `id` = ? AND `title` = ?");
$sql->bindParam(1, $_GET['id'], PDO::PARAM_INT);
$sql->bindParam(2, $_GET['title'], PDO::PARAM_STR);
$sql->execute();

Compartilhar este post


Link para o post
Compartilhar em outros sites

aqui esta tratando a var:

$login = $String->StringSemAcentos($_POST['login']);

 

edit:

 

 

So passa letra maiuscola e minuscola / numeros.... é um preg_replace

 

edi2:

 

todas as includes foram feitas por mim

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.