Desenvolvimento Web Seguro:

O inicio, o principio e o começo






2025-10-21 23:15

Alessandro Feitoza

  • Fortaleza, Ceará
  • Professor de códigos e outras computarias ( ͡° ͜ʖ ͡°)
  • Programador/Dev/Severino
  • PHP com Rapadura | PHPeste
  • TechLead / Backend Developer BussolaSocial

Agenda


  • 1. Introdução à segurança web
  • 2. Autenticação e Autorização
  • 3. Validação e Saneamento de Dados
  • 4. Segurança em APIs
  • 5. Armazenamento seguro
  • 6. Segurança no Frontend
  • 7. Infraestrutura e DevOps
  • 8. Simulações e análises

⚠️ EU não sou especialista


  • Sou desenvolvedor curioso e preocupado com a segurança das aplicações que faço

O minimo:


  • Fundamentos
  • Senhas e criptografia
  • XSS
  • SQL Injection
  • upload de arquivos

Arquiteturas da Web

Uma outra forma de ver com os olhos

Quais as principais tecnologias web?

Validação VS Segurança

Validar


do Latim, validare

Tornar Válido
Dar Validade

Onde precisamos validar?

Validações no frontend são usabilidade

Validações no backend são segurança

Validação não é Segurança!





Quando se fala em desenvolvimento de software temos isso:

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

  • Confidencialidade: apenas quem deve pode acessar
  • Integridade: dados não podem ser alterados indevidamente
  • Disponibilidade: sistemas devem estar acessíveis quando necessário

O que é Segurança da Informação?


  • Conjunto de práticas para proteger dados e sistemas
  • Garante Confidencialidade, Integridade e Disponibilidade (CID)

EXEMPLOS CONHECIDOS

Man in the Middle (MITM)

  • O atacante intercepta a comunicação entre duas partes
  • Pode capturar senhas, tokens ou dados sensíveis
  • Muito comum em redes Wi-Fi públicas

Exemplo: Você acessa o banco em um Wi-Fi público
O invasor intercepta os dados antes que cheguem ao banco
					

Outros...

  • Phishing
  • Malware/Ransonware
  • Engenharia Social
  • PenDrive*

Mas Não vamos focar nisso

OWASP

OWASP Top 10

As 10 principais vulnerabilidades de segurança em aplicações web

Vulnerabilidade


do Latim, vulnerabilis

aquele que pode serferido
Suscetivel a Ferimentos

1. Quebra de Controle de Acesso

  • Acesso a recursos sem a devida permissão
  • Exposição ou modificação de dados indevidamente

				//php		
				if (!$user->canAccess('admin_area')) {
					abort(403);
				}
					

				//js		
				if (!user.permissions.includes('admin_area')) {
					alert('Acesso negado');
					window.location = '/';
				}
					

1. Quebra de Controle de Acesso

  • Valide permissões no backend
  • Nunca confie apenas no frontend

2. Falhas Críticas de Criptografia

  • Uso de algoritmos ou protocolos inseguros
  • Dados sensíveis expostos ou mal protegidos

_ _ _

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...
}

					

2. Falhas Críticas de Criptografia

  • Use algoritmos modernos e seguros
  • Nunca armazene senhas em texto puro

    //javascripto
    const bcrypt = require("bcrypt");
    const hash = bcrypt.hash('123456');

    if (bcyrpt.compare('123456', hash)) {}
					

3. SQL INJECTION

  • Injeção de SQL ou NoSQL
  • Possibilidade de execução de comandos maliciosos

$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,
]);

					

3. SQL INJECTION

  • Sempre use prepared statements no backend
  • Escape dados exibidos no frontend

4. "Design" Inseguro

  • Ausência de segurança já na fase de projeto
  • Arquitetura ou fluxos vulneráveis por concepção

4. Design Inseguro

  • Inclua segurança no processo de projeto
  • Pense em cenários de ataque desde o início

5. Problemas de Configuração de Segurança

  • Configurações padrão inseguras
  • Serviços desnecessários expostos

5. Problemas de Configuração de Segurança

  • Desative serviços e portas não usados
  • Revise as configurações de produção

				// Exemplo de .env seguro
				APP_DEBUG=false
				APP_ENV=production
					

6. Componentes Vulneráveis e Desatualizados

  • Uso de bibliotecas e pacotes com falhas conhecidas
  • Falta de atualização ou monitoramento de dependências

6. Componentes Vulneráveis e Desatualizados

  • Mantenha dependências sempre atualizadas
  • Use ferramentas como Composer Audit e NPM Audit

7. Falhas de Identificação e Autenticação

  • Gestão inadequada de credenciais
  • Quebra na autenticação ou sessões

7. Falhas de Identificação e Autenticação

  • Use autenticação forte e tokens seguros
  • Implemente timeouts de sessão

				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
					

8. Falhas de Integridade de Software e Dados

  • Atualizações ou pacotes comprometidos
  • Manipulação maliciosa de dados ou software

8. Falhas de Integridade de Software e Dados

  • Verifique integridade de pacotes e uploads
  • Use assinaturas digitais se possível

9. Falhas de Monitoramento e Logging

  • Ausência de logs de segurança
  • Falhas não detectadas a tempo

9. Falhas de Monitoramento e Logging

  • Implemente logs de segurança no backend
  • Monitore eventos suspeitos

				Log::warning('Tentativa de acesso não autorizado', ['user' => $user->id]);
					

10. SSRF - Server Side Request Forgery

  • Servidor faz requisições manipuladas externamente
  • Pode acessar redes internas ou serviços privados

10. SSRF - Server Side Request Forgery

  • Valide e limite URLs recebidas pelo servidor
  • Evite requisições diretas a redes internas

				if (!filter_var($url, FILTER_VALIDATE_URL) || !str_starts_with($url, 'https://')) {
					throw new Exception('URL inválida');
				}
					

Conclusão

Segurança deve estar presente em todas as fases do desenvolvimento!

Mas por que







Resumo

o Mundão tá aí pra ensinar!

DÚVIDAS?

Valeu o Boi, valeu o Vaqueiro


@alessandro_feitoza
alessandrofeitoza.github.com/slides
youtube.com/c/AlessandroFeitozaComputaria

Referências