Bom dia. Desenvolvi um sistema para android mas estou um pouco perdido na parte de segurança. Utilizo o banco de dados sqlite e existem pastas no sistema com imagens e pdf. Como proteger esses arquivos (banco de dados, diretorio de imagens e diretorio de pdfs) para que apenas o sistema consiga acessá-los?
enquanto ao banco ele é protegido, somente sua aplicação consegue acessar-lo, o pdf já não sei, você salvou onde ? em qualquer pasta do SD CARD ? Ou na pasta que fica sua aplicação ? (Não sei se tem como fazer isso). Quando você cria o projeto você escolhe se não me engano no Android manifest a pasta do seu aplicativo, onde vai ficar o banco e etc. Exemplo: com.br.guj. Se você consegui salvar os arquivos nesta pasta(o banco SQLite é salvo lá), seus dados estarão protegidos :]
Obs: Tem como acessar atraves de programas como SuperUser de dá acesso total ao usuário do android.
R
rkrterada
Boa tarde. Obrigado pela resposta.
Meu sistema está no caminho /mnt/sdcard/data/br.com.android/
Dentro deste diretorio tem os diretorios database, relatorios(pdf) e imagens.
Quando eu acesso o cartão de memoria eu tenho acesso a todos eles.
Gostaria que não pudesse ou que fosse criptografado. Tem como?
Obs: Meu celular tem root.
V
Valeio_Bezerra
Não sei dizer. Essa aplicação é pra cliente seu ? Se for, não precisa disse, por que é quase certo que seu cliente não vai ter root
R
rkrterada
Blz Valeio. Obrigado pela resposta.
A
A_H_Gusukuma
Olá
Infelizmente, seus dados não estão protegidos na memória externa
Por default, os arquivos gravados aí são públicos e World-readable
Com alguns apps o usuário poderá ler ou alterá-los
Se os dados forem gravados na memória interna como private então eles são protegidos
Menos, é claro de um usuário root
Abraços
R
rkrterada
Boa tarde. Reaproveitando este tópico, estou tentando criptografar meu banco de dados sqlite. Estou usando o sqlcipher mas não tenho muita noção de como utilizá-lo.
Estou utilizando este código:
packagecom.demo.sqlcipher;importjava.io.File;importnet.sqlcipher.database.SQLiteDatabase;importandroid.app.Activity;importandroid.os.Bundle;publicclassHelloSQLCipherActivityextendsActivity{@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);InitializeSQLCipher();}privatevoidInitializeSQLCipher(){SQLiteDatabase.loadLibs(this);FiledatabaseFile=getDatabasePath("demo.db");databaseFile.mkdirs();databaseFile.delete();SQLiteDatabasedatabase=SQLiteDatabase.openOrCreateDatabase(databaseFile,"test123",null);database.execSQL("create table t1(a, b)");database.execSQL("insert into t1(a, b) values(?, ?)",newObject[]{"one for the money","two for the show"});}}
O banco foi criptografado mas eu não consigo utilizá-lo. Quando eu vou rodar um código sql ele gera um erro como se não estivesse encontrado a tabela.
Quando eu tento acessar diretamente na console, ele da o seguinte erro: File is encrypted or is not a database.