Script de Segurança PHP
25/08/2015
0
Sou novato em PHP. Estou criando um sistema de login com direcionamento para página especifica! O login está pronto, mas totalmente sem segurança... Quando copio o link e colo no navegador, a página abre sem pedir o login... Alguém pode me ajudar?
Segue código:
<?php if(isset($_POST['usuario'])){ $servidor = 'localhost'; //Host $usuario = 'root'; // User $senha = 'vertrigo'; // Senha do User $banco = 'login'; // Nome do BD //Conexao com o BD $pdo = new PDO('mysql:host='.$servidor.';dbname='.$banco,$usuario,$senha); $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //Recupera o Usuario e Senha $usuario = $_POST['usuario']; $senha = $_POST['senha']; try{ //Faz o Select da Pagina No Banco $sql = $pdo->prepare("SELECT `pagina` FROM `tabela_login` WHERE `usuario`= ? AND `senha`= ? LIMIT 1"); $sql->execute(array($usuario,$senha)); if($sql->rowCount() > 0 ){ foreach($sql->fetchAll() as $dados) { //Seleciona a Pagina E Redireciona para a pagina cadastrada no banco $pagina = $dados['pagina']; header('Location:'.$pagina); } }else{ echo 'Usuario ou Senha Incorretos'; } //Se o Usuario e senha Forem Corretos Entra no While }catch(PDOexception $e){ echo 'Ocorreu um Erro Ao Conectar : '.$e->getMessage(); } } ?>
Jonathan Allan
Post mais votado
Mais Posts
25/08/2015
Marcio Araujo
[url]http://blog.thiagobelem.net/principais-falhas-de-seguranca-no-php/[/url]
25/08/2015
William
Quanto a sua dúvida de abrir a url diretamente é o seguinte, uma sugestão seria no momento que você valida o usuário criar uma SESSION exemplo bem básico:
[code]
<?php
if(isset($_POST['usuario'])){
$servidor = 'localhost'; //Host
$usuario = 'root'; // User
$senha = 'vertrigo'; // Senha do User
$banco = 'login'; // Nome do BD
//Conexao com o BD
$pdo = new PDO('mysql:host='.$servidor.';dbname='.$banco,$usuario,$senha);
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
//Recupera o Usuario e Senha
$usuario = $_POST['usuario'];
$senha = $_POST['senha'];
try{
//Faz o Select da Pagina No Banco
$sql = $pdo->prepare("SELECT `pagina` FROM `tabela_login` WHERE `usuario`= ? AND `senha`= ? LIMIT 1");
$sql->execute(array($usuario,$senha));
if($sql->rowCount() > 0 ){
foreach($sql->fetchAll() as $dados) {
//Seleciona a Pagina E Redireciona para a pagina cadastrada no banco
$pagina = $dados['pagina'];
header('Location:'.$pagina);
}
}else{
echo 'Usuario ou Senha Incorretos';
}
//Se o Usuario e senha Forem Corretos Entra no While
}catch(PDOexception $e){
echo 'Ocorreu um Erro Ao Conectar : '.$e->getMessage();
}
}
?>
[code]
25/08/2015
Marcio Araujo
25/08/2015
William
25/08/2015
Marcio Araujo
25/08/2015
William
Po exemplo, ainda vejo muitos scripts onde a captura e o processamento dos dados é feita capturando direto $_POST['campo'], no mínimo poderia verificar se veio vazio o parâmetros, mas muitas vezes nem isso existe.
25/08/2015
Jonathan Allan
[url]http://blog.thiagobelem.net/principais-falhas-de-seguranca-no-php/[/url]
Obrigado Márcio Araújo! Esse link ajudou muito!
25/08/2015
Jonathan Allan
Quanto a sua dúvida de abrir a url diretamente é o seguinte, existem diversas maneiras de montar essa verificação, vou deixar uma sugestão bem básica, no momento que você valida o usuário criar uma SESSION:
session_start(); <?php if(isset($_POST['usuario'])){ $servidor = 'localhost'; //Host $usuario = 'root'; // User $senha = 'vertrigo'; // Senha do User $banco = 'login'; // Nome do BD //Conexao com o BD $pdo = new PDO('mysql:host='.$servidor.';dbname='.$banco,$usuario,$senha); $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //Recupera o Usuario e Senha $usuario = $_POST['usuario']; $senha = $_POST['senha']; try{ //Faz o Select da Pagina No Banco $sql = $pdo->prepare("SELECT `pagina` FROM `tabela_login` WHERE `usuario`= ? AND `senha`= ? LIMIT 1"); $sql->execute(array($usuario,$senha)); if($sql->rowCount() > 0 ){ foreach($sql->fetchAll() as $dados) { $_SESSION['validado'] = TRUE; //Seleciona a Pagina E Redireciona para a pagina cadastrada no banco $pagina = $dados['pagina']; header('Location:'.$pagina); } }else{ $_SESSION['validado'] = FALSE; echo 'Usuario ou Senha Incorretos'; } //Se o Usuario e senha Forem Corretos Entra no While }catch(PDOexception $e){ echo 'Ocorreu um Erro Ao Conectar : '.$e->getMessage(); } } [code] No topo das páginas internas você sempre inicia a SESSION com "session_start();" e cria um script (verifica_acesso.php) somente para verificar se existe a SESSION['validado'] e se ela tem o valor TRUE, caso não exisae vc redireciona para a index por exemplo, pode chamar esse script com um include: [code] <?php session_start(); include 'verifica_acesso.php';
Lembrando que esse exemplo é básico, tem sistemas que usam cookies para esse tipo de tarefa.
Obrigado Willian! me ajudou bastante! Vou fazer os teste e posto o resultado! Vc pode me falar mais sobre esse script de verificação?
25/08/2015
William
<?php if (empty($_SESSION['validado']) || $_SESSION['validado'] == FALSE): header('Location:index.php'); endif;
Depois é só chamar no topo das páginas internas que você deseja verificar se o usuário está logado, chamando com include:
<?php session_start(); include 'verifica_acesso.php'; /* Sua Página */
Caso não esteja logado ele será redirecionado para página index.php.
25/08/2015
Jonathan Allan
<?php if (empty($_SESSION['validado']) || $_SESSION['validado'] == FALSE): header('Location:index.php'); endif;
Depois é só chamar no topo das páginas internas que você deseja verificar se o usuário está logado, chamando com include:
<?php session_start(); include 'verifica_acesso.php'; /* Sua Página */
Caso não esteja logado ele será redirecionado para página index.php.
Excelente Willian!!! Vou fazer os testes ! Muito obrigado! Assim que terminar posto o resultado!
25/08/2015
Fabio Santos
25/08/2015
William
Estou iniciando essa semana uma série de 4 artigos sobre importações com PHP lendo arquivos do Excel, CSV, TXT e XML.
Terminando esses vou preparar um material sobre esse assunto de segurança com PHP, tenho recebido muitos pedidos e já vale a pena escrever.
26/08/2015
Jonathan Allan
<?php if (empty($_SESSION['validado']) || $_SESSION['validado'] == FALSE): header('Location:index.php'); endif;
Depois é só chamar no topo das páginas internas que você deseja verificar se o usuário está logado, chamando com include:
<?php session_start(); include 'verifica_acesso.php'; /* Sua Página */
Caso não esteja logado ele será redirecionado para página index.php.
Bom dia Willian! Fiz todo o processo, só mudei o "Location:index.php" para "Location:login.php", pois a intenção é voltar para a página de login se o acesso não for permitido... Sendo que.. quando tendo fazer o login, ele não acessa a página e retorna para a página de login... Estou quebrando minha cabeça desde de ontem para tentar resolver esse processo, mas até o momento sem sucesso... As dicas que você me passou estão servindo perfeitamente, agora só preciso entender porque que na hora do login, ele não vai para a página e permanece na página de login? Desculpa incomodar Willian, é que não estou conseguindo avançar...
26/08/2015
William
Por favor utilize a tag code para postar trechos de código!
26/08/2015
Jonathan Allan
Por favor utilize a tag code para postar trechos de código!
Aí vai Willian... As páginas que estou trabalhando são essas: 1- login.php ( contém o script php e a html com os campos para login ) / 2- verifica_acesso.php ( contém o script de verificação ) / 3 - pagina01.php ( contém o "include" e o conteúdo da pagina ).
1 - login.php ( Inseri alguns campos de segurança )
<?php if(isset($_POST['usuario'])){ $servidor = 'localhost'; //Host $usuario = 'root'; // User $senha = 'vertrigo'; // Senha do User $banco = 'login'; // Nome do BD //Conexao com o BD $pdo = new PDO('mysql:host='.$servidor.';dbname='.$banco,$usuario,$senha); $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //Recupera o Usuario e Senha $usuario = $_POST['usuario']; $senha = $_POST['senha']; //Novo - function tratar($str) { $retorno = trim($str); $retorno = addslashes($retorno); return $retorno; } //Novo - $usuario = isset($_POST["usuario"]) ? tratar($_POST["usuario"]) : “0”; //Novo - $senha = sha1($_POST['senha']); try{ //Faz o Select da Pagina No Banco $sql = $pdo->prepare("SELECT `pagina` FROM `tabela_login` WHERE `usuario`= ? AND `senha`= ? LIMIT 1"); $sql->execute(array($usuario,$senha)); if($sql->rowCount() > 0 ){ foreach($sql->fetchAll() as $dados) $_SESSION['validado'] = TRUE; { //Seleciona a Pagina E Redireciona para a pagina cadastrada no banco $pagina = $dados['pagina']; header('Location:'.$pagina); } }else{ $_SESSION['validado'] = FALSE; echo 'Usuario ou Senha Incorretos'; } //Se o Usuario e senha Forem Corretos Entra no While }catch(PDOexception $e){ echo 'Ocorreu um Erro Ao Conectar : '.$e->getMessage(); } } ?> // Abaixo todo conteúdo html...
2- verifica_acesso.php
<?php if (empty($_SESSION['validado']) || $_SESSION['validado'] == FALSE): header('Location:login.php'); endif; ?>
3 - pagina01.php
<?php session_start(); include 'verifica_acesso.php'; ?> // abaixo todo conteúdo da página em html...
Bom.. só existe essas páginas até o momento...
Clique aqui para fazer login e interagir na Comunidade :)