Segurança na Session
Pessoal,
Quanto a escolha de Session ou Cookie, eu prefiro trabalhar com Session.
Caso eu necessite salvar dados personalizados do internauta, ainda prefiro
usar Session do mesmo jeito e salvando preferência no banco de dados.
Gostaria de saber de vocês, se existe alguma vulnerabilidade na minha abertura
de Session abaixo:
VALIDA.PHP - Essa página recebe dados de login do forumulário
<?php
// Verifica se houve POST e se o usuário ou a senha é(são) vazio(s)
if (!empty($_POST) AND (empty($_POST['usuario']) OR empty($_POST['senha']))) {
header("Location: index.php"); exit;
}
include "../db/connect_valida.php";
$usuario = mysql_real_escape_string($_POST['usuario']);
$senha = mysql_real_escape_string($_POST['senha']);
// Validação do usuário/senha digitados
$sql = "SELECT `id`, `nome`, `nivel` FROM `usuarios` WHERE (`usuario` = '". $usuario ."') AND (`senha` = '". sha1($senha) ."') AND (`ativo` = 1) LIMIT 1";
$query = mysql_query($sql);if (mysql_num_rows($query) != 1) {
// Mensagem de erro quando os dados são inválidos e/ou o usuário não foi encontrado
echo "Login inválido!"; exit;
} else {
// Salva os dados encontados na variável $resultado
$resultado = mysql_fetch_assoc($query);
// Se a sessão não existir, inicia uma
if (!isset($_SESSION)) session_start();
// Salva os dados encontrados na sessão
$_SESSION['UsuarioID'] = $resultado['id'];
$_SESSION['UsuarioNome'] = $resultado['nome'];
$_SESSION['UsuarioNivel'] = $resultado['nivel'];
// Redireciona o visitante
header("Location: ../item_show/index.php"); exit;
}
?>
Pra me precaver mais ainda, o que acham de fazer subistituir:
$usuario = mysql_real_escape_string($_POST['usuario']);
$senha = mysql_real_escape_string($_POST['senha']);
por
$usuario = mysql_real_escape_string(htmlentities($_POST['usuario']));
$senha = mysql_real_escape_string((htmlentities($_POST['senha']));
CÓDIGO QUE FICA NAS PÁGINAS RESERVADAS
<?php
error_reporting(0);
ini_set(“display_errors”, 0 );
// A sessão precisa ser iniciada em cada página diferente
if (!isset($_SESSION)) session_start();
$nivel_necessario = 1;
// Verifica se não há a variável da sessão que identifica o usuário
if (!isset($_SESSION['UsuarioID']) OR ($_SESSION['UsuarioNivel'] < $nivel_necessario)) {
// Destrói a sessão por segurança
session_destroy();
// Redireciona o visitante de volta pro login
header("Location: ../login/restrito.php"); exit;
}
?>Discussão (8)
Carregando comentários...