SQLite é seguro?

Ao abrir um banco de dados do SQLite com o NotePad++ consegui ver alguns dos valores lá armazenados. Existe outra forma de criar o banco de dados que seja mais segura?

Você pode salvar os dados criptografados, pois mesmo que alguém abra o arquivo(como você fez) não vai conseguir entender.

1 curtida

Obrigado, não tinha pensado nisso!
Se souber algum tutorial de criptografia ajudaria imenso

Olha tem um artigo do DevMedia que mostra como utilizar os seguintes algorítimos:
DES (Data Encryption Standard)
AES (Advanced Encryption Standard)
RC4
OTP (One-Time-Pad).
A melhor parte é que você pode criptografar e descriptografar usando a biblioteca padrão do java.
Segue o link :

1 curtida

Vamos la

perguntar se X é seguro é uma pergunta muito aberta, vc precisa especificar.

por exemplo, sqlite vc pode abrir no bloco de notas e ver coisas. e dai? se a base sqlite estiver em um servidor, com as permissões corretas, ninguem vai fazer isso.

ok vc pode criptografar ou então obfuscar o conteudo. não adianta nada se vc deixa a senha em um arquivo d configuração ou se a obfuscação é algo trivial como Rot13

o que vc precisa se perguntar é: o que é aceitavel, em termos de segurança, para a sua aplicação e banco de dados?

em primeiro lugar, eu acho sqlite um banco adequado para certas situações como: dados estruturados apenas para leitura, aplicações embarcadas ou mobile, coisas simples que vc não precisa de um mysql, etc.

segurança é um topico que vem em camadas. em geral vc aplica em todos os pontos da sua aplicação, desde a interface até o backend, arquivos de configuração, etc. existem diversas soluções no mercado que ajudam alguma parte disso e vc tem que analisar o que é interessante e como eles vão conversar.

existe o risco de alguem abrir esse arquivo? se sim, como? que dano pode causar se for lido? que dano pode causar se for corrompido? como vc pode detectar ou fazer uma auditoria sobre isso? vc precisa de algo da familia ISO 27000? vc vai armazenar senhas, cartão de credito ou dados sensiveis?

uma dica é pensar que nem sempre vc precisa salvar dados sensiveis.

por exemplo, senhas vc pode salvar hash + salt em uma tabela

table Login {
id integer ( pk )
login string ( unique )
hash string
salt string ( unique ?)
...
}

o que vc faz é: quando o usuario criar uma senha, vc gera um salt, que é uma string enorme aleatoria e unica.
e vc salva o resultado do hash MD5 ou SHA1 de ( senha concatenado com salt ) e salva na tabela.

MD5/SHA1 é o que chamamos de hash criptografico não reversivel, ou seja, a partir do hash vc não consegue obter a string original (exceto via brute-force). dessa forma se vazar essa tabela, isso não sera util. para verificar a senha, no processo do proximo login vc gera o hash e compara se é igual ao esperado.

existem muitas coisas q vc pode fazer para melhorar esse sistema, mas é uma ideia. minha dica é não perder tempo pensando em um problema isolado e sim olhar a coisa como um todo.

jogos, por exemplo, podem ter o seu codigo binario criptografado e quando executam vc tem um processo especial que descompacta baseado na senha/licensa e se não estiver certo ele não vai executar de forma alguma. são muitas as possibilidades e algumas coisas são caras em tempo e $ para implementar

1 curtida

Obrigado pela resposta, vai ajudar muito. O meu maior medo, embora pouco provavel, é hackearem o computador e acederem ao banco de dados. No meu caso estou a guardar informações mais ou menos sensiveis (morada, numero de identificação) com o intuito de armazenar e quando necessario mostrá-las ao usuario. Visto que nao tenho necessidade de usar um servidor sql, como poderia armazenar estas informaçoes de maneira segura?

Vc pode começar a pensar: como evitar que o seu computador seja hackeado. fale com um bom sysadmin.

uma ideia é separar o front-end do backend, assim o frontend vai rodar apache / nginx e o backend apenas responsta na porta especifica ( ex 8080 ) naquela rede com o frontend ( por onde o atacante entraria ) e vc iria aceitar ssh em outra interface de rede, em uma rede interna mais protegida.

Mas em relação ao banco de dados a unica forma é criptografar?

Sem um servidor, não é possível manter os dados seguros. Geralmente se usa um aplicativo no servidor que controla as requisições do usuário, funcionando como uma interface para um aplicativo no lado cliente.

https://pt.wikipedia.org/wiki/Cliente-servidor
Todos os dados são armazenados nos servidores, que geralmente possuem controles de segurança muito maiores do que a maioria dos clientes. Os servidores podem controlar melhor o acesso a recursos, para garantir que apenas os clientes com credenciais válidas possam aceder e alterar os dados;

Não adiantaria usar criptografia, pois teria que criar um aplicativo para ler os dados, e é claro que um hacker teria acesso a esse aplicativo. Na verdade, isso poderia facilitar o acesso de pessoas não autorizadas.