Post

Blacklist & Whitelist

Blacklist & Whitelist

Sobre blacklist e whitelist

A entradas maliciosas é realizada intecionalmente para explorar vulnerabildades em uma aplicação. Podemos comprometer funcionalidades e, com isso, afetar a segurança da aplicação. Criando uma blacklist para bloquear essas entradas maliciosas, evitaremos que um atacante explorar essas vulnerabilidades. O objetivo também de uma whitelist seria justamente para tratar e permitir apenas entradas que são válidas. Mas em resumo, essa prática é importante, pois geralmente rejeita entradas de conteúdos específicos e conhecidos. Seja por caracteres, padrões, sequências e outros metódos de verificação.

  • Blacklist

A blacklist envolve bloquear caracteres que possam causar uma possível exploração, ou seja, baseia-se no princípio de exclusão.

Por exemplo:

1
<script>, SELECT, '

Mesmo que tenhamos realizado um filtro para “bloquear” esses caracteres, o atacante pode usar, por exemplo, um encode de url

1
2
<script>alert(1)</script> //Sem urlencode
%3Cscript%3Ealert%281%29%3C%2Fscript%3E //Com urlencode

Esse metódo não é o dos melhores para realizar validações e o metódo comum seria o uso de regex (Expressões Regulares)

1
'|%|--|;|/⧹∗|⧹⧹⧹∗|_|⧹[|@|xp_

Lembrando que cuidado ao usar Regex e se atente no uso dele. Expliquei sobre em Entendendo Input Validation

  • Whitelist

A whitelist tem o objetivo de verificar se os dados enviados correspodem ao que foi definido na regra. Por exemplo, comprimento, tipo do dado, valores esperados pela aplicação e etc. Um exemplo seria quando enviamos um CPF, ser feito a validação se tem 11 dígitos, verificar se o cpf não é inválido e passar no cálculo de validação de cpf.

  • Tipo de dado: O dado é realmente o que a aplicação espera? Se ele deve ser númerico ou não, se deveria ser número positivo.
  • Limite de caracteres: Um campo com limite de caractares evita entradas excessiva no campo
1
2
3
4
5
<form action="/login.php">
  <label for="username">Username:</label>
  <input type="text" id="username" name="username" maxlength="10">
  <input type="submit" value="Submit">
</form>

Essa validação é 100% segura (confia)

Como já foi falado, evitar deixar que o usuario tenha controle de algo. A forma correta seria validar no backend, onde o usuário é decretado, abolido e não tem aura.

This post is licensed under CC BY 4.0 by the author.

Trending Tags