O inicio, o principio e o começo
do Latim, validare
Tornar Válido
Dar Validade
Validações no frontend são usabilidade
Validações no backend são segurança
E onde entra a segurança?
Segurança não é produto, é processo, ela fornece qualidade
Segurança e Velocidade de entrega são situações completamentes diferentes.
Enquanto velocidade é vísivel, segurança não...
até que ela falhe
Custo para corrigir uma falha de segurança
Retirado de relatório da IBM
Vale ressaltar os pilares
EXEMPLOS CONHECIDOS
Exemplo: Você acessa o banco em um Wi-Fi público
O invasor intercepta os dados antes que cheguem ao banco
OWASP
As 10 principais vulnerabilidades de segurança em aplicações web
do Latim, vulnerabilis
aquele que pode serferido
Suscetivel a Ferimentos
//php
if (!$user->canAccess('admin_area')) {
abort(403);
}
//js
if (!user.permissions.includes('admin_area')) {
alert('Acesso negado');
window.location = '/';
}
0-9
10 * 10 * 10 = 1.000 possibilidades
$nome = $_POST['nome'];
$email = $_POST['email'];
$senha = $_POST['senha'];
$sql = "
INSERT INTO tb_users (nome, email, senha)
VALUES ('{$nome}', '{$email}', '{$senha}');
";
$nome = $_POST['nome'];
$email = $_POST['email'];
$senha = password_hash(
$_POST['senha'],
PASSWORD_DEFAULT
);
$sql = "
INSERT INTO tb_users (nome, email, senha)
VALUES ('{$nome}', '{$email}', '{$senha}');
";
//login
$email = $_POST['email'];
$senha = $_POST['senha'];
$sql = "SELECT * FROM tb_users WHERE email='{$email}';";
if (password_hash($senha, $senhaQueTaNoBanco)) {
// pode entrar...
}
//javascripto
const bcrypt = require("bcrypt");
const hash = bcrypt.hash('123456');
if (bcyrpt.compare('123456', hash)) {}
$email = $_POST['email'];
$senha = $_POST['senha'];
$sql = "
SELECT * FROM tb_users WHERE email='{$email}' LIMIT 1
";
$email = $_POST['email']; // ' OR 1=1; --
$senha = $_POST['senha'];
$sql = "
SELECT * FROM tb_users WHERE email='{$email}' LIMIT 1
";
$email = $_POST['email']; // ' OR 1=1; --
$senha = $_POST['senha'];
$sql = "
SELECT * FROM tb_users WHERE email='' OR 1=1 -- LIMIT 1'
";
//solução
$email = $_POST['email'];
$senha = $_POST['senha'];
$pdo->prepare(
"SELECT * FROM tb_users WHERE email=:email"
);
$pdo->bindParams([
':email' => $email,
]);
// Exemplo de .env seguro
APP_DEBUG=false
APP_ENV=production
session_set_cookie_params(['httponly' => true, 'secure' => true]);
session_start();
// Exemplo simples de timeout de sessão no frontend
setTimeout(() => {
alert('Sessão expirada');
window.location = '/login';
}, 1800000); // 30 minutos
Log::warning('Tentativa de acesso não autorizado', ['user' => $user->id]);
if (!filter_var($url, FILTER_VALIDATE_URL) || !str_starts_with($url, 'https://')) {
throw new Exception('URL inválida');
}
Segurança deve estar presente em todas as fases do desenvolvimento!
o Mundão tá aí pra ensinar!
DÚVIDAS?