Como mantenho um banco de dados MySQL seguro?
Pergunta
Estarei implementando um PHP/mySQL
configuração para armazenar informações de cartão de crédito.
Parece que AES_ENCRYPT/AES_DECRYPT
é o caminho a seguir,
mas ainda estou confuso em um ponto:
Como mantenho a chave de criptografia segura?
Conectá-lo aos meus scripts PHP (que ficarão no mesmo servidor que o banco de dados) parece uma grande falha de segurança.
Qual é a solução de "melhores práticas" aqui?
Solução
Você deve pensar muito sobre se REALMENTE precisa manter o CC#.Se você não tem um ótimo motivo, NÃO!A cada duas semanas você ouve falar de alguma empresa sendo comprometida e CC# sendo roubados.Todas essas empresas cometeram uma falha fatal: mantiveram informações demais.Mantenha o CC# até que a transação seja concluída.Depois disso, exclua-o.
No que diz respeito à segurança do servidor, a melhor ação é proteger o hardware e usar o soquete interno do sistema para MySQL, e bloquear qualquer acesso de rede ao servidor MySQL.Certifique-se de usar as permissões do sistema e do MySQL para permitir o mínimo de acesso necessário.Para alguns scripts, você pode considerar a autenticação somente gravação.Na verdade, não existe nenhum método de criptografia que seja infalível (pois você sempre precisará descriptografar e, portanto, armazenar a chave).Isso não quer dizer que você não deva - você pode armazenar sua chave em um local e, se detectar um comprometimento do sistema, poderá destruir o arquivo e inutilizar os dados.
Outras dicas
MySQL, existem seis etapas fáceis que você pode seguir para proteger seus dados confidenciais.
Passo 1:Remover curingas nas tabelas de concessão
Passo 2:Exigir o uso de senhas seguras
Observação:Use a opção “--secure-auth” do MySQL para evitar o uso de formatos de senha MySQL mais antigos e menos seguros.
Etapa 3:Verifique as permissões dos arquivos de configuração
Passo 4:Criptografar transmissões cliente-servidor
Etapa 5:Desabilitar acesso remoto
Etapa 6:Monitore ativamente o log de acesso do MySQL
Ferramentas de segurança
Eu concordo, mas não faça o cc se não precisar também.Mas se você realmente tiver também, certifique-se de que o arquivo que o contém não esteja acessível na web.Você pode escrever um binário que retorne a chave.Dessa forma, não é armazenado em texto não criptografado.Mas se o seu servidor estiver comprometido, ainda será fácil obtê-lo.
a segurança que você precisa depende da sua aplicação.por exemplo, se o único momento em que o cc# for usado for quando o usuário estiver logado (cenário do tipo loja on-line fina), você poderá criptografar o cc# com um hash da senha de texto simples do usuário, um per- salt do usuário e um salt cc# dedicado.não armazene esse valor permanentemente.
como você não está armazenando esse valor, o único momento em que você pode obter esse valor é quando o usuário digita sua senha para fazer login.apenas certifique-se de ter boas políticas de expiração de sessão e coleta de lixo em vigor.
se esta situação não se aplicar a você, descreva sua situação com mais detalhes para que possamos fornecer uma resposta mais adequada.