- Use HTTPS em todos os lugares.
- Armazene hashes de senha usando
Bcrypt
(sem sal necessário -Bcrypt
faz isso por você). - Destrua o identificador de sessão após
logout
. - Destrua todas as sessões ativas ao redefinir a senha (ou oferecer).
- Deve ter o parâmetro
state
no OAuth2. - Nenhum redirecionamento aberto após o login bem-sucedido ou em qualquer outro redirecionamento intermediário.
- Ao analisar a entrada Signup/Login, limpe os caracteres javascript://, data://, CRLF.
- Definir cookies seguros, httpOnly.
- Na verificação móvel baseada em
OTP
móvel, não envie o OTP de volta na resposta quando a APIgenerate OTP
ouResend OTP
for chamada. - Limite as tentativas de
Login
,Verify OTP
,Resend OTP
egenerate OTP
APIs para um usuário específico. Tenha um conjunto de recuo exponencial ou/e algo como um desafio baseado em captcha. - Verifique a aleatoriedade do token de redefinição de senha no link enviado por e-mail ou SMS.
- Defina uma expiração no token de redefinição de senha por um período razoável.
- Expirar o token de redefinição após ter sido usado com sucesso.
- Qualquer acesso a recursos como
my cart
,my history
deve verificar a propriedade do usuário logado do recurso usando o ID da sessão. - ID de recurso iterável em série deve ser evitado. Use
/me/orders
em vez de/user/37153/orders
. Isso funciona como uma verificação de integridade caso você tenha esquecido de verificar o token de autorização. - O recurso 'Editar e-mail/número de telefone' deve ser acompanhado por um e-mail de verificação para o proprietário da conta.
- Qualquer recurso de upload deve higienizar o nome do arquivo fornecido pelo usuário. Além disso, por motivos gerais além da segurança, faça upload para algo como S3 (e pós-processe usando lambda) e não seu próprio servidor capaz de executar código.
- O recurso
Upload de foto de perfil
deve limpar todas as tagsEXIF
também se não for necessário. - Para IDs de usuário e outros IDs, use compatível com RFC
UUID
em vez de números inteiros. Você pode encontrar uma implementação para isso para sua linguagem no Github. - JWT são incríveis. Use-os se necessário para seus aplicativos/APIs de página única.
-
sal
dos gateways de pagamento não deve ser codificado. -
secret
/auth token
de SDKs de terceiros não devem ser codificados permanentemente. - Chamadas de API destinadas a serem feitas
servidor para servidor
não devem ser feitas a partir do aplicativo. - No Android, todas as permissões concedidas devem ser cuidadosamente avaliadas.
- No iOS, armazene informações confidenciais (tokens de autenticação, chaves de API etc.) nas chaves do sistema. não armazene esse tipo de informação nos padrões do usuário.
- Fixação de certificado é altamente recomendada.
-
Add
CSP cabeçalho para mitigar ataques de XSS e injeção de dados. Isso é importante. -
Add
CSRF cabeçalho para evitar falsificação de solicitação entre sites. Adicione também os atributos SameSite nos cookies. -
Add
HSTS cabeçalho para evitar o ataque de remoção de SSL. -
Adicione
seu domínio à lista de pré-carregamento HSTS -
Add
X-Frame-Options para proteger contra Clickjacking. -
Add
X-XSS-Protection cabeçalho para mitigar ataques XSS. - Atualize os registros DNS para adicionar o registro SPF para mitigar ataques de spam e phishing.
- Adicione verificações de integridade de subrecursos se estiver carregando suas bibliotecas JavaScript de uma CDN de terceiros. Para segurança extra, adicione a diretiva CSP require-sri-for para não carregar recursos que não tem um SRI sat.
- Use tokens CSRF aleatórios e exponha APIs de lógica de negócios como solicitações HTTP POST. Não exponha tokens CSRF sobre HTTP, por exemplo, em uma fase inicial de atualização de solicitação.
- Não use dados críticos ou tokens em parâmetros de solicitação GET. A exposição de logs do servidor ou uma máquina/pilha processando-os exporia os dados do usuário por sua vez.
-
Sanitize
todas as entradas do usuário ou quaisquer parâmetros de entrada expostos ao usuário para evitar XSS. - Sempre use consultas parametrizadas para evitar SQL Injection.
- Higienize a entrada do usuário se estiver usando-a diretamente para funcionalidades como importação de CSV.
- Entrada do usuário
Sanitize
para casos especiais como robots.txt como nomes de perfil caso você esteja usando um padrão de url como coolcorp.io/username. - Nunca codifique manualmente ou construa JSON por concatenação de strings, não importa quão pequeno seja o objeto. Use suas bibliotecas ou estrutura definidas pela linguagem.
- Limpe as entradas que usam algum tipo de URL para evitar SSRF.
- Higienize as saídas antes de exibi-las aos usuários.
- Se você for pequeno e inexperiente, avalie usando o AWS elasticbeanstalk ou um PaaS para executar seu código.
- Use um script de provisionamento decente para criar VMs na nuvem.
- Verifique se há máquinas com
portas abertas
indesejadas publicamente. - Verifique se não há senhas padrão para
bancos de dados
especialmente MongoDB e Redis. - Use SSH para acessar suas máquinas; não configure uma senha, use a autenticação baseada em chave SSH.
- Instale atualizações em tempo hábil para agir em vulnerabilidades de dia zero, como Heartbleed, Shellshock.
- Modifique a configuração do servidor para usar TLS 1.2 para HTTPS e desative todos os outros esquemas. (A troca é boa.)
- Não deixe o modo DEBUG ligado. Em algumas estruturas, o modo DEBUG pode fornecer acesso completo a REPL ou shells ou expor dados críticos em rastreamentos de pilha de mensagens de erro.
- Esteja preparado para maus atores e DDOS - use um serviço de hospedagem que tenha mitigação de DDOS.
- Configure o monitoramento para seus sistemas e registre coisas (use New Relic ou algo parecido).
- Se estiver desenvolvendo para clientes corporativos, cumpra os requisitos de conformidade. Se AWS S3, considere usar o recurso para criptografar dados. Se estiver usando o AWS EC2, considere usar o recurso para usar volumes criptografados (até os volumes de inicialização podem ser criptografados agora).
- Configure um e-mail (por exemplo, security@coolcorp.io) e uma página para pesquisadores de segurança relatarem vulnerabilidades.
- Dependendo do que você está fazendo, limite o acesso aos seus bancos de dados de usuários.
- Seja educado com os relatores de bugs.
- Tenha sua revisão de código feita por um colega desenvolvedor de uma perspectiva de codificação segura. (Mais olhos)
- Em caso de hack ou violação de dados, verifique os logs anteriores de acesso aos dados, peça às pessoas para alterar as senhas. Você pode exigir uma auditoria por agências externas, dependendo de onde você está incorporado.
- Configure o Netflix's Scumblr para ouvir sobre palestras sobre sua organização nas plataformas sociais e na pesquisa do Google.