English | 繁中版 | 简中版 | Français | 한국어 | Nederlands | Indonesia | ไทย | Русский | Українська | Español | Italiano | 日本語 | Deutsch | Türkçe | Tiếng Việt | Монгол | हिंदी | العربية | Polski | Македонски | ລາວ | فارسی
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 (exemplo: JWT, OAuth). - 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.
- Use uma chave de segurança aleatória e complicada (
JWT Secret) para tornar ataques de força bruta menos eficientes. - Não utilize o algoritmo de criptografia informado no cabeçalho do payload. Force o uso de um algoritmo específico no back-end (
HS256ouRS256). - Defina o tempo de vida do token (
TTL,RTTL) o menor possível. - Não armazene informações confidenciais no JWT, pois elas podem ser facilmente decodificadas.
- 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.
- 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.
- 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 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).
- 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). - 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.
- Implemente funcionalidade de reversão de deploy (rollback).
- yosriady/api-development-tools - Uma coleção de recursos úteis para a construção de API RESTful HTTP+JSON.
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 team@shieldfy.io.