Logo

dev-resources.site

for different kinds of informations.

Validação e Sanitização em Aplicações Web

Published at
11/26/2024
Categories
braziliandevs
webapp
security
portugues
Author
ruitrigo_dev
Author
12 person written this
ruitrigo_dev
open
Validação e Sanitização em Aplicações Web

O Que São e Por Que São Cruciais?

A validação e sanitização são, sem sombra de dúvida, um dos pilares da segurança em aplicações web. Enquanto a validação verifica se os dados recebidos estão no formato esperado, a sanitização limpa e transforma esses dados para garantir que são seguros para processamento.

Validação

Por um lado, a validação é como um porteiro rigoroso que verifica se tens bilhete antes de entrar no espetáculo. Verifica o tipo, o formato e o conteúdo dos dados recebidos. Vejamos um exemplo de código vulnerável sem validação:

$idade = $_POST['idade'];
$query = "SELECT * FROM utilizadores WHERE idade = $idade";
Enter fullscreen mode Exit fullscreen mode

Este código é um convite aberto a ataques de injeção SQL, pois o input pode facilmente manipular o comportamento da query. Em vez disso, deverias fazer algo como:

$idade = filter_var($_POST['idade'], FILTER_VALIDATE_INT);
if ($idade === false || $idade === null) {
    echo("Idade inválida");
}

// Cria uma conexão
$conn = new mysqli($servername, $username, $password, $dbname);

// Executa um Prepared Statement
$stmt = $conn->prepare("INSERT INTO utilizadores (idade) VALUES (?)");
$stmt->bind_param("i", $idade);
Enter fullscreen mode Exit fullscreen mode

PHP Wiki | filter_var() — Filters a variable with a specified filter

Sanitização

Por outro lado, a sanitização é como um filtro de água que remove impurezas. Transforma dados potencialmente perigosos em formatos seguros. Vejamos outro exemplo vulnerável:

$nome = $_GET['nome'];
echo "Olá, $nome!";
Enter fullscreen mode Exit fullscreen mode

Este código pode levar a um ataque XSS. Uma versão sanitizada seria:

$nome = htmlspecialchars($_GET['nome']);
echo "Olá, $nome!";
Enter fullscreen mode Exit fullscreen mode

O efeito esperado é a conversão dos caracteres "&, ', ", <, >" para o seu equivalente em HTML ENTITIES, ou seja, eles tornam-se meramente símbolos visuais sem efeito algum em termos de código interpretado pelo browser.

PHP Wiki | htmlspecialchars() — Convert special characters to HTML entities

Validação do Lado do Cliente

É importante notar que, embora a validação do lado do cliente seja útil para melhorar a experiência do utilizador, nunca é suficiente para garantir a segurança. Afinal de contas, um atacante pode facilmente contornar essas verificações. Por isso, a validação do lado do servidor é imprescindível.

Desta maneira, nem toda a sanitização é igual. Dependendo do contexto onde os dados serão utilizados, diferentes técnicas devem ser aplicadas. Por exemplo, dados que serão inseridos numa base de dados SQL requerem uma sanitização diferente daqueles que serão exibidos numa página HTML.

Não Reinventes a Roda

Felizmente, não precisas de criar todas estas proteções do zero. Existem inúmeras bibliotecas e frameworks que oferecem funções robustas de validação e sanitização. Contudo, é crucial compreender como funcionam para as utilizar corretamente.

Por fim, mas não menos importante, realizar "pentests" regularmente é fundamental. Estes testes simulam ataques reais e podem revelar falhas que passaram despercebidas. Lembra-te: é melhor descobrires as vulnerabilidades antes dos atacantes. Se tens iniciativa de o fazer, podes começar por listar a tua empresa numa plataforma Bug Bounty, onde hackers éticos reportam falhas na tua aplicação em troca de remuneração.

braziliandevs Article's
30 articles in total
Favicon
Aumente seu leque de ferramentas no desenvolvimento com um exemplo prático usando MoSCoW
Favicon
Estruturas de Dados: Heap
Favicon
Um ano de Magalu Cloud, e aí?
Favicon
Learn JQuery
Favicon
Se preferimos composição, então por que os frameworks usam herança?
Favicon
[Boost]
Favicon
Idempotência, Potência e Métodos HTTP em REST
Favicon
Migrando subscribe Callbacks para subscribe arguments no RxJS
Favicon
Selamat Datang
Favicon
Como realizar o Deploy de Projetos Web em uma VPS
Favicon
🙅🏾‍♂️ Flexbox Sem Frescura
Favicon
Bulma: CSS Fácil, Rápido e menos pior que Bootstrap e Tailwind
Favicon
Github Copilot de graça!
Favicon
🔰Git e Github: Comandos basicos do git
Favicon
Segmentações de dados e Tabelas Dinâmicas Recomendadas
Favicon
OBS Studio como baixar e Instalar
Favicon
Curso gratuito de Typescript 2025 - Aula 002
Favicon
Junior Portare é professor de Marketing e Vendas
Favicon
O que é Threads?: Não é o Twitter da Meta
Favicon
BLoC - Mais que um package, um padrão
Favicon
Como usar WebSockets em Flask (How to use WebSockets in Flask)
Favicon
Porque você deve melhorar sua capacidade de comunicação para trabalhar com tecnologia
Favicon
Normalização dos Bancos de Dados Relacionais (Handbook)
Favicon
Estruturas de Dados: Árvores
Favicon
Curso gratuito de Typescript 2025
Favicon
Um resumo do meu 2024
Favicon
De uma página para vários components
Favicon
Artigos sobre CSS que explodiram minha cabeça em 2024
Favicon
Validação e Sanitização em Aplicações Web
Favicon
Fundamentos da Segurança em Aplicações Web

Featured ones: