Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa noite, gostaria de ajuda.
tenho este código a baixo funcionando, gostaria de incrementar o md5 em meu sistema, como faço?
e minha pagina de login mudaria alguma coisa?
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$insertSQL = sprintf("INSERT INTO usuario (id, usuario, nome, email, telefone, senha, data_cadastro) VALUES (%s, %s, %s, %s, %s, %s, %s)",
GetSQLValueString($_POST['nome'], "int"),
GetSQLValueString($_POST['usuario'], "text"),
GetSQLValueString($_POST['nome'], "text"),
GetSQLValueString($_POST['email'], "text"),
GetSQLValueString($_POST['telefone'], "text"),
GetSQLValueString($_POST['senha'], "text"),
GetSQLValueString($_POST['data_cadastro'], "text"));
mysql_select_db($database_localhost, $localhost);
$Result1 = mysql_query($insertSQL, $localhost) or die(mysql_error());
$insertGoTo = "index.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}Beleza amigo deu certo o MD5, então como eu faria com password_hash ?
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$insertSQL = sprintf("INSERT INTO usuario (id, usuario, nome, email, telefone, senha, data_cadastro) VALUES (%s, %s, %s, %s, %s, %s, %s)",
GetSQLValueString($_POST['nome'], "int"),
GetSQLValueString($_POST['usuario'], "text"),
GetSQLValueString($_POST['nome'], "text"),
GetSQLValueString($_POST['email'], "text"),
GetSQLValueString($_POST['telefone'], "text"),
GetSQLValueString($_POST['senha'], "text"),
GetSQLValueString($_POST['data_cadastro'], "text"));
mysql_select_db($database_localhost, $localhost);
$Result1 = mysql_query($insertSQL, $localhost) or die(mysql_error());
$insertGoTo = "index.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}
O login esta assim.
$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($_GET['accesscheck'])) {
$_SESSION['PrevUrl'] = $_GET['accesscheck'];
}
if (isset($_POST['usuario'])) {
$loginUsername=$_POST['usuario'];
$password=$_POST['senha'];
$MM_fldUserAuthorization = "nivel";
$MM_redirectLoginSuccess = "index.php";
$MM_redirectLoginFailed = "login.php";
$MM_redirecttoReferrer = false;
mysql_select_db($database_localhost, $localhost);
$LoginRS__query=sprintf("SELECT usuario, senha, nivel FROM usuario WHERE usuario=%s AND senha=%s",
GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text"));
$LoginRS = mysql_query($LoginRS__query, $localhost) or die(mysql_error());
$loginFoundUser = mysql_num_rows($LoginRS);
if ($loginFoundUser) {
$loginStrGroup = mysql_result($LoginRS,0,'nivel');
if (PHP_VERSION >= 5.1) {session_regenerate_id(true);} else {session_regenerate_id();}
//declare two session variables and assign them
$_SESSION['MM_Username'] = $loginUsername;
$_SESSION['MM_UserGroup'] = $loginStrGroup;
if (isset($_SESSION['PrevUrl']) && false) {
$MM_redirectLoginSuccess = $_SESSION['PrevUrl'];
}
header("Location: " . $MM_redirectLoginSuccess );
}
else {
header("Location: ". $MM_redirectLoginFailed );
}
}
e como eu faria o filtro contra invasaão mysql injection>
23 minutos atrás, Kosonome disse:
Basicamente você coloca:
GetSQLValueString(md5($_POST['senha']), "text"),
E no seu login você precisa comparar com md5($_POST['senha']) também.
Mas devo ressaltar que seu código é bem inseguro fazendo deste jeito. Você está sujeito a SQL Injection por não filtrar os dados que vem do $_POST e $_SERVER com filter_input() e não estar utilizando PDO Prepare Statements. Além disso md5() já não é quase mais usado, melhor trocar para password_hash().
consegui com MD5, coloquei aqui senha e login funcionando perfeito...
agora me diz como faço o filtro contra inject neste código grato!Primeiramente o filtro:
>
Citar
$post = (object) filter_input_array((htmlspecialchars(INPUT_POST)), FILTER_DEFAULT);
Depois é pegar o post e enviar para uma classe/função para verificar ou codificar certos caracteres
>
Citar
funcao_nome($post-senha);
Depois de passado pela função/método que vai prevenir SQL inject na instância da execução:
>
Citar
$mdPass = md5($post-senha);
Então usar PrepareStatements da PDO como já foi citado, para registrar os dados, lembrando que lugar do $post->senha você usará a variável criada $mdPass.
Bom isso é o básico do básico de um sistema eficaz e seguro. Que esse básico já garante 99% de segurança.
Lembrando que para usar senha "criptografada" baste que use o comandos:
>
Citar
<?php
$string = "Seria o post que digitado";
$cript = md5($string);
Também pode usar isso:
>
Citar
<?php
$string = "Seria o post que digitado";
$cript = sha1($string);Criei um exemplo de verificação aqui:
Spoiler
<?php
class Checagem {
private static $Valor;
private static $Caractere;
public static $retorno = null;
public static function validarCampo($verifica) {
self::$Valor = (string) $verifica;
if (!preg_match('/^[a-zA-ZÀ-Úà-ú ]+$/', self::$Valor)) {
self::$retorno = "Opa! Só pode usar letras e espaços";
return true;
} else {
self::$retorno = null;
return false;
}
}
}
$post = (object) filter_input_array((htmlspecialchars(INPUT_POST)), FILTER_DEFAULT);
$post->senha = "1a";
if (Checagem::validarCampo($post->senha)) {
echo Checagem::$retorno;
} else {
echo "Ok passou pela verificação!";
}>
4 minutos atrás, OmarF disse:
Criei um exemplo de verificação aqui:
Ocultar conteúdo
<?php
class Checagem {
private static $Valor;
private static $Caractere;
public static $retorno = null;
public static function validarCampo($verifica) {
self::$Valor = (string) $verifica;
if (!preg_match('/^[a-zA-ZÀ-Úà-ú ]+$/', self::$Valor)) {
self::$retorno = "Opa! Só pode usar letras e espaços";
return true;
} else {
self::$retorno = null;
return false;
}
}
}
$post = (object) filter_input_array((htmlspecialchars(INPUT_POST)), FILTER_DEFAULT);
$post->senha = "1a";
if (Checagem::validarCampo($post->senha)) {
echo Checagem::$retorno;
} else {
echo "Ok passou pela verificação!";
}
esta verificação posso colocar antes do meu código correto?>
39 minutos atrás, Marcones Borges disse:
esta verificação posso colocar antes do meu código correto?
Olha é só um exemplo simples, sobre POO, onde envio algo para um método de uma classe se responsabilizar pela validação dos dados.
Então vamos explicar....
Primeiro eu crio o arquivo que será a classe de verificação: Checagem.class.php
Spoiler
<?php
class Checagem {
private static $Valor;
private static $Caractere;
public static $retorno = null;
public static function validarCampo($verifica, $quantidade) {
self::$Valor = (string) $verifica;
self::$Caractere = (int) $quantidade;
if (empty(self::$Valor) || (strlen(self::$Valor) <= self::$Caractere)) {
self::$retorno = "Opa! você tem que digitar mais de " . self::$Caractere . " caracteres!";
return true;
} else if (!preg_match('/^[a-zA-ZÀ-Úà-ú ]+$/', self::$Valor)) {
self::$retorno = "Opa! Só pode usar letras e espaços";
return true;
} else {
self::$retorno = null;
return false;
}
}
}
O seja nesse arquivo eu posso ter quantos métodos eu quiser, para validar qualquer coisa que seja necessário validar logins senhas etc... E dentro de cada método eu posso colocar as condições de validação. Note que nesse exemplo agora eu coloquei um verificação de quantidade de caractere necessário.
Então no arquivo que vai receber o post eu aplico o filtro, incluo o arquivo da classe e instancio ela, para poder acessar seus métodos:
Spoiler
<?php
$post = (object) filter_input_array((htmlspecialchars(INPUT_POST)), FILTER_DEFAULT);
require_once ('./Checagem.class.php');
$obj = new Checagem();
Já isso aqui é só um exemplo porque o filtro já aplicado vai pegar tudo que veio da array GLOBAL.POST:
Não sendo necessário definir o que vai se o que:
>
Citar
$post->senha = "1a";
Ou seja... Digamos que eu tenha criado um formulário e cliquei em submeter se eu tivesse no arquivo que vai receber o post um var_dump($post); veria todos os dados da GLOBAL envelopados pelo filtro.
Então agora seria a validação:
Spoiler
if (!$post) {
echo "O arquivo não recebeu nenhum post";
} else {
// Esse é a condição da classe se ela retornar existe essa condição
// Parando o script nessa condição
if (Checagem::validarCampo($post->senha, 10)) {
echo Checagem::$retorno;
}
else {
echo "Ok passou pela verificação!";
// Então como o motivo do post aqui eu aplico a criptação da senha
$cript = md5($post->senha);
/*
* Aqui com os dados já limpos e verificados.
* Solicitaria a uma outra casse PDO para verificar os dados no banco
* e se não existir ai sim eu cadastraria o usuário.
*/
}
}
Ficando mais ou menos assim o arquivo que receberia o post, mas isso aqui é só um exemplo básico
Spoiler
<?php
$post = (object) filter_input_array((htmlspecialchars(INPUT_POST)), FILTER_DEFAULT);
require_once ('./Checagem.class.php');
$obj = new Checagem();
if (!$post) {
echo "O arquivo não recebeu nenhum post";
} else {
if (Checagem::validarCampo($post->senha, 10)) {
echo Checagem::$retorno;
}
else {
echo "Ok passou pela verificação!";
// Então como o motivo do post aqui eu aplico a criptação da senha
$cript = md5($post->senha);
/* ************************************ */
}
}Tanto md5 quanto sha1 não são tão seguros assim. Façam com password_hash e "PASSWORD_BCRYPT" pois segue uma implementação do Blowfish. O password gerado fica com até 72 caracteres ou mais, cuidado.
$passwordHash = password_hash('senha', PASSWORD_BCRYPT);
if (password_verify('senha-errada', $passwordHash)) {
// senha correta
} else {
// senha errada
}
>
15 horas atrás, OmarF disse:
Primeiramente o filtro:
O filtro filter_input_array() não é para utilizar com uma linha só provavelmente, o exemplo da documentação do PHP é bem legal: https://secure.php.net/manual/pt_BR/function.filter-input-array.php
Um exemplo de filtragem e PDO seria assim:
// string de conexão ao banco de dados
$pdo = new PDO('sqlite:/path/db/users.db');
// SQL
$stmt = $pdo->prepare('SELECT name FROM users WHERE id = :id');
// evitar html/javascript injection filtrando o $_GET['id']
$id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT);
// evita SQL injection em conjunto com filter_input
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
// executa o SQL no banco de dados
$stmt->execute();
Basicamente você coloca: