Ir para conteúdo

POWERED BY:

Arquivado

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

Guilherme Gonçalves

Alguém sabe me dizer se esta validação é segura contra Injection?

Recommended Posts

Boa tarde pessoal gostaria de saber se esta página é segura contra sql injection e o que posso fazer caso não seja.

 


<?php

//conecta com o db
include ("conexao.php");

$usuario= $_POST['usuario'];
$senha = $_POST['senha'];

$usuario = mysql_escape_string($usuario);
$senha = mysql_escape_string($senha);

$usuario = htmlspecialchars($usuario, ENT_QUOTES);
$senha = htmlspecialchars($senha, ENT_QUOTES);


//faz a confirmação de nome e senha no db

$logar = mysql_query("
SELECT * FROM tabela
WHERE user='$usuario' AND password='$senha'
") or die("erro ao selecionar");

if($senha == "" || $usuario == ""){
    header('location:erro.php');
}else if(mysql_num_rows($logar)>0 ){
    @session_start(); //iniciamos a sessão
    $_SESSION["login"] = "logado"; // nomeamos a sessão
    header('location:gerenciador.php');
}else{
    header('location:erro.php');
}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

#2

 

 

Prepared Statements do PDO é a única segurança que você pode garantir

 

Não é prudente afirmar que é a única forma...

O correto seria dizer que é uma das formas mais adequadas e recomendadas.

 

 

#3

 

session_start() tem que ser uma das primeiras coisas do script.

Não necessariamente.

O importante é não conflitar cabeçalhos.

Não havendo disparo de cabeçalhos, não haverá conflitos.

 

exemplo

 

 

 

<?php

/*
um monte de coisas aqui
*/


$foo = 123;
$bar = 1;


$sum = $foo + $bar;




session_start(); // estou iniciando no meio do código sem problemas..


echo $sum; // esse "echo" dispara um cabeçalho... Se o session_start() ou qualquer outra função que necessite disparar cabeçalho, estiver após esse "echo", então poderá ocorrer conflitos..


$_SESSION['foo'] = 'bar';
?>

http://forum.imasters.com.br/topic/342563-dicas-para-uso-de-variveis-de-sesso/

Compartilhar este post


Link para o post
Compartilhar em outros sites

como o @Erico falou , mysql_* não mais usado, procure estudar PDO.

 

mas e aquilo para saber o certo, tem que saber o errado.

 

aqui alguns exemplos de sql injection

 

http://www.unixwiz.net/techtips/sql-injection.html

http://www.devmedia.com.br/sql-injection-em-ambientes-web/9733

http://www.segurancaemrede.com/ataques-sqlinjection/tutorial-como-invadir-com-sql-injection-mysql-sql-injection-por-method-_get-e-_post-programa-para-executar-o-sqlinjection/

 

 

veja como funciona, e faça você mesmo o teste.

Compartilhar este post


Link para o post
Compartilhar em outros sites

#8..

 

O fato é que nunca foi certo usar pois os métodos empregados corrompem dados.

 

Esse assunto sobre SQL Injection tornou-se um mito de tão bagunçado que é..

Infelizmente ao longo dos anos muitos blogs e foruns espalharam soluções errôneas e temos hoje uma grande maioria que emprega tais soluções.

 

Veja esse tópico antigo:

http://forum.imasters.com.br/topic/276729-segurana-em-php/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exatamente como o hinom menciou, gerou-se uma bagunça.

 

Como exemplo, fui realizar uma inserção através de um editor web (TinyMC, CKEditor, etc), em um sistema/servidor terceirizado, e basicamente ocorreu um loop.

 

Que foi o seguinte:

1º - Ao escrever no editor, ele inseria automaticamente escapes;

2º - Ao submeter o formulário, o PHP inseria escapes;

3º - O banco mysql estava habilitado para inserir escapes nos dados inseridos;

4º - Quando o SGBD retornava o que foi salvo no SGBD, ele inseria escapes;

5º - Pule para o segundo passo...

 

Imaginem o que acontecia quando esse editor inseria uma imagem (tag img)....

Compartilhar este post


Link para o post
Compartilhar em outros sites

#9 #10

 

depois que li o post que o hinom passou entendi porque virou uma bagunça, na verdade não tem receita de bolo cada caso um caso.

 

Pode funcionar ainda, mas como já falado o negócio agora é PDO. Estava fazer umas mysql_* aqui mais vejo que estou desatualizado.

 

Valeu pelas respostas!.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não é bem "cada caso um caso."..

 

o problema é que a maioria mistura as camadas..

 

daí a grande parte da confusão..

 

as funções mysql_*... sim, estão obsoletas há anos..

 

no mínimo mysqli_* deve usar...

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.