Рубрики
Uncategorized

Devsecops — Dos — Paginação de apis (Parte 3)

Este post faz parte de uma coleção de posts sobre segurança de software ao longo do processo de desen … Tagged Security, DevOps, WebDev.

Este post faz parte de uma coleção de posts sobre segurança de software ao longo do processo de desenvolvimento e operação (devsecops). O Tipo de ulnerabilidade abordado neste artigo é Негайчао -де -Сержичо Através da experlação de paginações de recursos de apis.

SE Você não leu as Duas разделяет передние да, Da Série, Recomendo sua leitura antes de continuar, pois ali säo invlicados alguns canceitos

  • Parte 1 — dos e пропускная способность
  • Parte 2 — DOS E полезная нагрузка

É comum, hoje em dia, que os sistemas precisem fornecer muitos registros de seus bancos de dados para que aplicações consumpam estis informações, seja exibindo em uma ui outé mesmo реализация wootros fluxos de operações com как informações atepidas. Seria Implaticevel, Por Vários Motivos (Latência, Banda, Tempo de Resposta E, Principalmente, Experiancia de usuário), Fornecer Todos Os Dados de Uma Tabela (Muitas Vezes Gigantesca) de Uma Só Vez. Como Solução, OS Sistemas Entregam Seus Dados Em «Lotes» Pequenos. Estes Lotes SãAO Chamados de Páginas (de Registros), Esse Processo é Chamado de Paginação Анкет

ОК, MAS Qual A Relação Disso Com DOS (отказ в обслуживании)?

Пример De Como Derrubar Uma Aplicação por ausência ou má configuração de Paginação

Digamos Que, Um Sistema de Controle Audio Visual, Armazene informações sobre quais músicas estão disponíveis para serem ouvidas, e que você precisa disponibilizar estes dados para Que várias aplicações sososam tratá-los (например: uma aplicação web, um aplicativo, uma planilha excel com scripts vba). Esta «Exposição» Dos Dados Pode Ser Feita de Diamless Formas (Ex: Soap, Rest, Protocolos Binários, Arquivos и т. Д.), MAS, Como de Costume, Utilizarei Um Padrão forte de Mercado Que São в качестве веб -apis modeladas em Rest 1 :

GET /api/songs

Na prática, isso quale que a aplicações cliente podem dizer «Sistema de Controle Audio Visual, Me Disponibize Todas как Músicas Em Sua Base de Dados» Анкет Se quantidade de músicas для gigantesca (dezenas de milhões de Registros), Você Consegue Imaginar o Проблема, пара -перевод Estes Dados, Correto? Seus Servidores Podem Ficar Sem Memória, Operação Levaria Um Tempo Immertaticavel Que Degragearia Qualquer Experience De USO, OU Seria Essument Uma Arquitetura de Streaming de Dados Para Transferir Tanta Informação de Forma Robusta.

POR ESTES MOTIVOS, NESTAS COMUNICAçES DE SORGHT ENTRE DIVERENTES CAMADAS Físicas, é Comum Que os Registros sejam disponibilizados de forma Пагинада Анкет OU Seja, Fornecemos os Primeiros X Elementos, Depois Mais x E Assim Por Diante. Desta forma, модельагем да Носса Api de músicas Mudou um pouco:

GET /api/songs?limit=20&offset=0

Нет конечной точки Acima, смещение Представление Quantidade de Registros que desejamos пулян Antes de agecar a Consultá-los, E предел é Quantidade Máxita de Registros Que Serão Consultados. Neste Exemplo, o Valor 0 é Passado Para смещение E 20 Para предел , OU Seja: Desejamos Obter, No Máxixo, как 20 Primeiras Canções do Banco de Dados (Critério de Ordenação Natural, Pois nada foi Operificoado). SE Quisermos OS «PROXIXOS 20», BASTA TROCARMOS компенсировать Para 20 E Continuar Com O Mesmo Valor de предел Анкет SE Quisermos A «Terceira Página de 20 Registros», смещение Прием 40 E Assim Por Diante. Também é Comum Que Essa Técnica de Paginação Использование OS Termos пропускать (Invés de offset ) e возьми (Invés de limit ).

Autra alternativa é utilizar diretamente o canceito de página, onde informaríamos o número da página e o tamanho da mesma (20 Registros =

MAS, Независимая DA Técnica de Paginação, O Para A Sua Segurança Também !

Isso Mesmo, как Paginações Podem ser utilizadas para Instabilizar Seu Sistema (Um Dos objetivos do dos ), pois SE O Código Que Realiza A Paginação não Controla O Tamanho Das Páginas , você está exposto aectber tamanhos gigantescos de página e ter seu serviço instabilizado!

Vejamos, Uma tentativa de ataque

GET /api/songs?limit=10000000&offset=0

Caso niona evinea uma «Limitação» para o Valor Informado Em предел , Néao ganho prático de fazer paginação. Isso é ruim para Brecha Para Instabilidade, Pois é Office Consultar Páginas Com Grandes Quantidades de Dados.

Solução

Solução é simples: estabelecer um limite seguro para o Valor Máxio Que Pode Ser Informado em предел (OU PageSize , Take и т. Д.).

Isso Pode Ser Feito Com Uma arvificação dos Valores Passados Por Parâmetro:

DEFAULT_LIMIT = 20
MAX_LIMIT = 100

limit = request.args.get('limit', DEFAULT_LIMIT)
if int(limit) > MAX_LIMIT:
    abort(400)
# query database with pagination parameters

Предпочтения, централизовать Este Controle de forma que todos os endpoints paginados realizem esta validação com facilidade e sem duplicação de código.

Por Exemplo, Podemos utilizar Декораторы Python :

@app.route('/api/songs')
@ensure_safe_limit()
def get_songs():
    # normally here we'd call a database paginated query
    return jsonify([{'name': 'Respect', 'by': 'Aretha Franklin'},
                   {'name': 'Um dia frio', 'by': 'Djavan'}])

O Декоратор @ensure_safe_limit Garante que nossa página estará segura de limites muito altos. Баста Аплика- lo em todos os endpoints paginados. O Mesmo Pode Ser Feito Com Функции высшего порядка e com middlewares. Закупайте документ Do Do SEU Framework OU Plataforma de Desenvolvimento!

Solução opply Ser Ser Conferida no Repl.it abaixo. АВТОМОБИЛЬНЫЙ ДЕКОРЕТОР ЭСТЕГО ЭМА utils.py Анкет

Caso O Limite «único» Que você estabelece em todo seu Software não atenda algumas situações expectificas, aumente-o separadamente, semper com bastante cautela e яичек. Outra Opção é ocê estabelecer Estes Limites Por Perfis de usuários do seu sistema. Por Exemplo, Usuários Administradores Oringem Limite de 1000 Registros Por Páginas, Usuários «Visualizadores» Основное ограничение de 50 , Pois Realizam esta Operação com muito mais futencia и т. Д.

Заключение

Возможно, импортируйте программное обеспечение ProteCão do Seu Contract Дос em várias técnicas difendetes, pois além de controlar quantidade de recursos por página, também é preciso controlar o пропускная способность (Quantidade de requisições por Intervalo de tempo) com que isso é solicitado, conforme abordado na parte 1 desta série.

  • Seu Seu Software разрешение Que Terceiros Informem Quantidade de Registros «Por Página», Estabeleça um Limite seguro dentro do seu contexto de aplicação. Adote Isso Como Padrão de Paginação.
  • Фаса как Devidas Mensurações para inncontrar um tamanho limite Идеально идеал Para atender seus usuários sem expor seu sistema.
  • Conforme Já Dito, Desenvolva uma visão «caixa preta» e an -анализ sua api com -uma externa, sem detalhes de infulação. Paginação é Um Offiny Ponto de Brecha, MAS Essectem Outros. Por onde você pode estar ulnevel?
  1. O Пример Дадо эм, néo anula ou inviabiliza o fato de que todo tipo de Integração de dados, com opção de paginar os os recursos transferidos, tenha o mesmo tipo de preocupação abordado ndest, contra a explora de deges de de paginazees poste poste a explora de de grandes paginosees oste a ox -de grandes paginosees abordado Сервисто. SEMPEROD INTERCFAIN DE PROGMATAUAO QUE VOCE ESTá Disponibilizando para terceiros! ↩

Оригинал: «https://dev.to/bernardobrezende/devsecops-dos-paginacao-de-apis-parte-3-35df»