Pular para o conteúdo
Todos os conceitos

Autorização por função

Checar acesso por lista de bloqueio, por método ou por grafia deixa funções de admin abertas para quem não devia.

Cada ação sensível (fechar a temporada, promover um usuário, exportar tudo) é uma função que deveria ser restrita a certos papéis. Autorização por função é decidir, antes de executar, se este usuário pode chamar esta função. Três erros comuns abrem buraco.

Lista de bloqueio em vez de permissão. Bloquear só o papel guest deixa passar member, staff e qualquer papel novo. O certo é liberar só quem pode (if role !== 'admin': deny) e negar o resto.

Checar só um método. Uma regra que barra só GET /admin ignora POST, PUT, DELETE. Se o app atende a ação em qualquer verbo, um POST passa reto.

Checar texto sem normalizar. Comparar o caminho byte a byte deixa /ADMIN escapar de um filtro que só casa /admin, enquanto o app roteia os dois para o mesmo lugar.

A defesa: negar por padrão, liberar por lista de permissão (de papéis e de métodos), e normalizar o caminho antes de checar. Em Python, troque if role == "guest": deny() por require_permission("season:close"), que vale para todo verbo e todo papel.

Três checagens furadas a regra passa mesmo assim bloqueia só guest member passa barra só GET /admin POST passa compara texto /admin /ADMIN escapa
Uma deny-list barra só guest; member passa. Um filtro que olha só GET deixa POST passar. Comparar /admin sem normalizar deixa /ADMIN escapar.

Aparece nestes desafios