English | 繁中版 | 简中版 | العربية | Azərbaycan | Български | বাংলা | Català | Čeština | Deutsch | Ελληνικά | Español | فارسی | Français | हिंदी | Indonesia | Italiano | 日本語 | 한국어 | ພາສາລາວ | Македонски | മലയാളം | Монгол | Nederlands | Polski | Русский | ไทย | Türkçe | Українська | Tiếng Việt
Lista das mais importantes medidas de segurança para o desenvolvimento, teste e publicação da sua API.
- Não use
Basic Auth. Use padrões de autenticação. - Não reinvente a roda nos quesitos
Autenticação,geração de tokensearmazenamento de senhas. Use os padrões recomendados para cada caso. - Implemente funcionalidades de limite (
Max Retry) e bloqueio de tentativas de autenticação. - Use criptografia em todos os dados confidenciais.
- Limite a quantidade de requisições (Throttling) para evitar ataques DDoS e de força bruta.
- Use HTTPS no seu servidor para evitar ataques MITM (Man In The Middle Attack).
- Use cabeçalho
HSTScom SSL para evitar ataques SSL Strip. - Desative as listagens de diretórios.
- Para APIs privadas, permita o acesso apenas de IPs/hosts da lista branca (whitelist).
- Sempre valide o
redirect_urino seu servidor através de uma lista de URLs conhecidas (previamente cadastradas). - Tente sempre retornar códigos de negociação, não o token de acesso (não permita
response_type=token). - Utilize o parâmetro
statecom um hash aleatório para previnir CSRF no processo de autenticação OAuth. - Defina escopo de dados, e valide o parâmetro
scopepara cada aplicação.
- Utilize o método HTTP apropriado para cada operação,
GET (obter),POST (criar),PUT/PATCH (trocar/atualizar)eDELETE (apagar). - Valide o tipo de conteúdo informado no cabeçalho
Acceptda requisição (Content Negotiation) para permitir apenas os formatos suportados pela sua API (ex.application/xml,application/json... etc), respondendo com o status406 Not Acceptablese ele não for suportado. - Valide o tipo de conteúdo do conteúdo da requisição informado no cabeçalho
Content-Typeda requisição para permitir apenas os formatos suportados pela sua API (ex.application/x-www-form-urlencoded,multipart/form-data, application/json... etc). - Valide o conteúdo da requisição para evitar as vulnerabilidades mais comuns (ex.
XSS,SQL-Injection,Remote Code Execution... etc). - Não utilize nenhuma informação sensível (credenciais, senhas, tokens de autenticação) na URL. Use o cabeçalho
Authorizationda requisição. - Use apenas criptografia do lado do servidor.
- Use um serviço gateway para a sua API para habilitar cache, limitar acessos sucessivos (ex. por quantidade máxima permitida (Quota), por limitar tráfego em situações de estresse (spike arrest) ou por limitar o número de conexões simultâneas na sua API (Concurrent Rate Limit)), e facilitar o deploy de novas funcionalidades.
- Verifique continuamente os endpoints protegidos por autenticação para evitar falhas na proteção de acesso aos dados.
- Não utilize a identificação do próprio usuário. Use
/me/ordersno lugar de/user/654321/orders. - Não utilize ID's incrementais. Use UUID.
- Se você estiver processando arquivos XML, verifique que entity parsing não está ativada para evitar ataques de XML externo (XXE - XML external entity attack).
- Se você estiver processando arquivos XML, verifique que entity expansion não está ativada para evitar Billion Laughs/XML bomb através de ataques exponenciais de expansão de XML.
- Use CDN para uploads de arquivos.
- Se você estiver trabalhando com uma grande quantidade de dados, use workers e queues (fila de processos) para retornar uma resposta rapidamente e evitar o bloqueio de requisições HTTP.
- Não se esqueça de desativar o modo de depuração (DEBUG mode OFF).
- Use stacks não executáveis quando disponíveis.
- Envie o cabeçalho
X-Content-Type-Options: nosniff. - Envie o cabeçalho
X-Frame-Options: deny. - Envie o cabeçalho
Content-Security-Policy: default-src 'none'. - Remova os cabeçalhos de identificação dos softwares do servidor -
X-Powered-By,Server,X-AspNet-Version. - Envie um cabeçalho
Content-Typena sua resposta com o valor apropriado (ex. se você retorna um JSON, então envie umContent-Type: application/json). - Do not return overly specific error messages to the client that could reveal implementation details, use generic messages instead, and log detailed information only on the server side.
- Não retorne dados sensíveis como senhas, credenciais e tokens de autenticação.
- Utilize o código de resposta apropriado para cada operação. Ex.
200 OK(respondido com sucesso),201 Created(novo recurso criado),400 Bad Request(requisição inválida),401 Unauthorized(não autenticado),405 Method Not Allowed(método HTTP não permitido) ... etc.
- Monitore a especificação e implementação do escopo da sua API através de testes unitários e de integração.
- Use um processo de revisão de código, ignorando sistemas de auto-aprovação.
- Certifique-se de que todos os componentes de seus serviços sejam validados por softwares AV (anti-vírus, anti-malware) antes de enviar para produção, incluindo as dependências de terceiros utilizadas.
- Execute continuamente testes de segurança (análise estática/dinâmica) em seu código.
- Verifique suas dependências (software e sistema operacional) para vulnerabilidades conhecidas.
- Implemente funcionalidade de reversão de deploy (rollback).
- Use logins centralizados para todos os serviços e componentes.
- Use agentes para monitorar todo o tráfego, erros, solicitações, e respostas.
- Use alertas para SMS, Slack, Email, Telegram, Kibana, Cloudwatch, etc.
- Verifique se você não está registrando dados confidenciais, como cartões de crédito, senhas, PINs, etc.
- Use um sistema IDS e/ou IPS para monitorar as solicitações e instâncias de sua API.
- yosriady/api-development-tools - Uma coleção de recursos úteis para a construção de API RESTful HTTP+JSON.
- You don't need JWT, just use a randomly generated API key. If you need asymmetric encryption or tamper prevention, here are some alternatives to JWT.
- Implement sliding window rate limiting per API key and IP.
- Use exponential backoff for repeated failed authentication attempts.
- Implement CAPTCHA or proof-of-work challenges after suspicious activity.
- Monitor and alert on unusual API usage patterns (time, volume, endpoints).
- Disable introspection in production environments.
- Implement query depth limiting to prevent nested query attacks.
- Use query cost analysis to prevent resource exhaustion.
- Whitelist allowed queries in production when possible.
- Rotate API keys and secrets on a regular schedule.
- Use hardware security modules (HSM) for signing operations.
- Implement secret scanning in CI/CD pipelines.
- Never commit secrets to version control - use environment variables or secret managers.
- Implement mutual TLS (mTLS) for service-to-service communication.
- Validate all requests even from internal services.
- Use short-lived tokens with automatic refresh.
- Implement request signing for sensitive operations.
Sinta-se livre para contribuir, fazendo um fork deste repositório, fazendo algumas alterações e enviando um PR. Dúvidas, envie um e-mail para [email protected].