Restringir acesso a Classe

4 respostas
V

Eu dei uma pesquisada ja aqui no fórum embora tenha encontrado algo relevante
não era bem aquilo que eu precisava.

Ès o seguinte , Eu tenho um classe que autentica os usuários e partir dela
comanda-se o funcionamento do programa . Até ai tudo bem é a estrutura básica
de qualquer programa . E tem também as funções CHAVE , eu no momento deixo o código
inserido na classe que faz a autenticação. Sem levar em conta descompilação o único método
que é public nessa classe é o que recebe como parâmetro as informações do usuário (user/pass).

Porém o código está muito carregado , e o correto mesmo seria separar as funções CHAVE das funções de
controle.Eu não tenho nenhuma paranóia em proteger o código eu só queria que minha classe tivesse pelo menos
algum esquema pra privar-se do acesso de outros programas.

Dentre algumas que eu pensei:

*Declarar a classe como private
Porém bastaria que alguém criasse um pacote semelhante e a inserisse para ela poder ser usada (suponho).

*Privar a instância e criar um método GetInstance seletivo
Nem sei bem como fazer , ou se funciona . No tal método GetInstance() , algum parametro , como uma hash
da classe que está tentando usa-lo.

  • Assinar o pacote jar
    isso resolve ?

Como podem ver não tenho muitas idéias , e são ruins ainda . Mas e ai alguma sugestão ?

4 Respostas

Linkel

Cara, desculpe. Com todo o seu texto ainda não entendi o que quer realmente…
Acho que tenho uma ideia quanto a isso, se é o que estou pensando.
Mas explica melhor a sua inteção…

R

Cara,

Java é uma linguagem interpretada, então descompilar uma classe é muito fácil… você pode obfuscar o seu código, o que dificulta mas não impede.

Acredito que a melhor forma de proteger seu código é protegento os ambientes em que ele roda e seu CVS…

Este pode ser um componente a parte(remoto) do seu sitema também, e atuar como um serviço de autenticação… isso evita que ele fique junto da sua aplicação e tericamente facilita a segurança do seu código, pois ele não vai ser manipulado toda hora… você pode setar permissões específicas no CVS, etc…

Isso tudo depende de como está estruturado seu sistema e como você vai usar essa autenticação.

Também não entendi muito bem o que vc queria, posso ter viajado aqui heheh

[]´s

sergiotaborda

Na realidade vc precisa realmente declarar a classe em nivel de pacote e criar outras classes publicas que acessam a essa usando metodos nivel de pacote. Ou seja, a classe não pode ser acessada por ninguem fora do pacote.
Porém, realmente bastaria alguem criar uma classe e colocá-la no mesmo pacote para ter acesso À sua. (o que já exige muito conhecimento da sua aplicação pois se a classe é de pacote ela é invisivel. Não aparece no javadocs nem na documentação. Logo só vai criar um hack quem conhecer o codigo a fundo.
Para evitar isso o seu jar tem que ser assinado. Dessa forma , mesmo que a pessoa edite seu jar e coloque mais um .class ela não vai conseguir assinar o jar alterado com as mesmas chaves que o seu original foi assinado.
Claro que, o seu classloader principal tem que se certificar que o jar está assinado correctamente. Caso contrário é tudo absurdo.

Mas eu não entendi qual é o problema de outros sistemas acessarem a sua classe. O que ela tem de especial ?

V
sergiotaborda:
Na realidade vc precisa realmente declarar a classe em nivel de pacote e criar outras classes publicas que acessam a essa usando metodos nivel de pacote. Ou seja, a classe não pode ser acessada por ninguem fora do pacote. Porém, realmente bastaria alguem criar uma classe e colocá-la no mesmo pacote para ter acesso À sua. (o que já exige muito conhecimento da sua aplicação pois se a classe é de pacote ela é invisivel. Não aparece no javadocs nem na documentação. Logo só vai criar um hack quem conhecer o codigo a fundo. Para evitar isso o seu jar tem que ser assinado. Dessa forma , mesmo que a pessoa edite seu jar e coloque mais um .class ela não vai conseguir assinar o jar alterado com as mesmas chaves que o seu original foi assinado. Claro que, o seu classloader principal tem que se certificar que o jar está assinado correctamente. Caso contrário é tudo absurdo.

Mas eu não entendi qual é o problema de outros sistemas acessarem a sua classe. O que ela tem de especial ?

Ok , pessoal acho que quem mais intendeu oque eu queria foi o sergiotaborda !
Olha oque ELAS (classes) tem de especial é o meu trabalho (muito) ,
e sem levar em conta que a pessoa possa descompilar , o acesso deveria ser
privado.

Obrigado pelas sugestões sergiotaborda vou testar , pra quem não compriendeu muito bem vou tentar
dar um exemplo mais claro.

package gui;

public class main
{
public static void main(String[] args)
{
String user;
String pass;
//Autentica
String any = new String();
//[...]
String result = tool1.run(any);
}
}
package gui;

private class tool1
{
private void f1(){}
private void f2(){}
private boolean f3(){return true;}
private String f4(String out){return out};

public static String run(String in)
{
if(f3()){f1();f2();in=f4(in);}
return in;
}
}

Resumindo eu gostaria de saber se nesse caso então , apenas a classe main (ou outra do meu projeto)conseguiria acessar os métodos da minha classe (tool1 por exemplo).

Criado 8 de março de 2008
Ultima resposta 8 de mar. de 2008
Respostas 4
Participantes 4