Pular para o conteúdo
Todos os conceitos

Contornar o filtro

Uma lista negra olha a forma do texto; o atacante escreve a mesma coisa de outra forma.

Uma defesa comum e fraca é a lista negra: rejeitar a entrada se ela contiver uma palavra perigosa (owner, class, system). O problema é que a lista olha o TEXTO CRU que chegou, enquanto o motor olha o EFEITO depois de avaliar. Há sempre uma forma de escrever a mesma coisa que o filtro não reconhece.

A mais simples: acesso por ponto e por colchete são equivalentes (page.owner é page['owner']), e a chave entre colchetes pode ser uma expressão. Então a palavra bloqueada é montada em tempo de avaliação: page['own' ~ 'er'] constrói 'owner' só quando roda, e o texto enviado nunca contém owner inteiro.

A lição é que lista negra não segura injeção. O conserto de verdade é não deixar a entrada virar template e usar sandbox; se for restringir, use uma lista de permissão (só estes campos, só estas operações).

filter filtro: bloqueia a palavra owner no texto cru acesso direto page.owner rejeitado: achou owner chave montada ao avaliar page['own'~'er'] passa: sem owner no texto 'own'~'er' vira owner so ao rodar
O filtro bloqueia a palavra owner no texto cru, mas montar a chave por partes ('own' mais 'er') ao avaliar passa pelo filtro.

Aparece nestes desafios