Os itens marcados com (*) indicam que o item é uma solução fundamental para o problema relevante, e você deve tentar o seu melhor para completar esses conteúdos. Os itens não marcados com (*) indicam que o item não pode eliminar completamente os riscos de segurança, mas apenas que os problemas de segurança podem ser evitados através deste método.
Injeção SQL
(*) Use a função de ligação de variável SQL ao combinar instruções SQL
(*) Caso o banco de dados não forneça vinculação de variáveis, é necessário escapar todas as variáveis que compõem o SQL e não exibir a mensagem de erro intacta no navegador.
Defina permissões apropriadas para usuários que acessam o banco de dados.
Injeção de linha de comando do sistema operacional
(*) Evite usar linguagens que possam iniciar comandos shell. Se você tiver permissão para iniciar comandos shell, será necessário verificar todas as variáveis nos parâmetros da função para garantir que apenas operações legais sejam incluídas e não verifique os parâmetros do nome do caminho/. travessia de diretório.
(*) Não utilize parâmetros passados de fora diretamente como nomes de arquivos.
(*) Limite as operações de abertura de arquivos a diretórios fixos e proíba que nomes de arquivos contenham caminhos. Defina permissões de acesso corretas para arquivos no servidor web.
(*) Use conteúdo difícil de adivinhar como ID da sessão
(*) Não salve o ID da sessão na URL
(*) Defina o atributo seguro para cookies usados no protocolo https
(*) Gere uma nova sessão após login bem-sucedido
(*) Após o login bem-sucedido, gere uma informação secreta além do ID da sessão, e verifique-a sempre que visitar a página. Não use um valor fixo como ID da sessão.
Ao salvar o ID da sessão no cookie, defina a data de expiração Ataque de script entre sites (XSS)
Solução quando a inserção de conteúdo HTML não é permitida
(*) Toda saída para a página deve ter escape
(*) Somente URLs que começam com "http://" ou "https://" são permitidos na saída de URLs
(*) Não gere conteúdo <script>…</script> dinamicamente
(*) Não leia a folha de estilo de um site externo Solução para verificar o conteúdo de entrada quando o conteúdo HTML for permitido.
(*) Analise o conteúdo HTML de entrada, gere uma árvore de análise e, em seguida, extraia as partes que não são de script Use scripts para excluir strings relevantes no conteúdo HTML de entrada.
(*) Especifique novamente o atributo charset do Content-Type no cabeçalho HTTP da resposta Para evitar vazamento de informações do cookie, o método Trace deve ser desabilitado e o atributo HttpOnly deve ser definido para todos os cookies falsificados. (CSRF)
(*) Todas as páginas são acessadas através do POST. Uma informação é gerada aleatoriamente na parte oculta da página anterior. A página após o envio verifica a informação e a executa somente se estiver correta.
(*) Exigir senha novamente antes de realizar negócios
(*) Confirme se o Referer está correto Somente quando estiver correto, execute operações importantes e envie um email para o endereço de email predefinido.
Injeção de cabeçalho HTTP
(*) Não produza cabeçalhos HTTP diretamente, mas use a API de saída de informações de cabeçalho fornecida pelo ambiente em execução
(*) Quando a API não puder ser usada, as quebras de linha nas informações do cabeçalho de entrada devem ser proibidas. As quebras de linha em todas as entradas externas devem ser excluídas (usando alguns meios para enviar e-mails para o endereço especificado pelo invasor).
(*) Não use parâmetros externos como informações de cabeçalho de e-mail. Quando você precisar usar parâmetros externos para definir as informações de cabeçalho, exclua os caracteres perigosos.
Declaração de direitos autorais: você pode reimprimir à vontade, mas o autor original Charlee deve ser citado durante a reimpressão.
Link original: http://tech.idv2.com/2008/04/19/secure-website-checklist/
Referência específica de estratégia de aplicação: Lista de verificação de segurança para práticas de PHP