Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Bruno Augusto

Licenciamento de Sistema Web...

Recommended Posts

Boas,

 

Queria discutir, se já não, sobre as melhores formas de licenciamento de um sistema Web, visando evitar que, se algum cracker conseguir invadir o servidor e roubar os arquivos ele não os possa usar.

 

Sei que, para esse problema deveria criptografar meu código, mas revertê-lo ao original, hoje em dia, aparentemente não é problema para quem pratica Engenharia Reversa sobre as tecnologias de cifragem existentes.

 

Gostaria de gerar um chave de licença para meus clientes bem segura e para melhorar ainda mais, NÃO incluir no sistema uma função que verificaria a validade dessa chave pois, se o script puder ser decodificado, apenas analisando essa função, seria possível gerar um keygen para o sistema.

 

Para checar a validade, tanto da lógica do algoritimo, como se "ainda é uma chave válida", pensei em, via Web Service, enviar a chave para o meu servidor e lá, verificar a integridade.

 

Enfim, vamos ver os prós que tenho com os contras que não tenho para chegar na melhor solução.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A solução mais adequada (se você estiver usando php, é claro) é compilar o código em bytecode, já que engenharia reversa nesse código se tornaria praticamente impossível. A idéia de acessar um webservice para poder checar a existencia de alguma assinatura e talz não é válida. Pois se a aplicacao tenta buscar a alguma assinatura por exemplo no servidor http://www.xxx.com/assinaturaWS, o cracker pode instalar a aplicação no servidor fazendo com que o endereco do webservice seja apontado para outra maquina que por sua vez, reponde com uma licenca válida.

 

Para mais informacoes sobre o bcompiler vide: http://php.net/manual/en/book.bcompiler.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas na idéia que bolei para esse serviço não há um URL que busca a licença e sim um rotina a qual cada URL de cada "seção" do serviço consultaria antes de liberar o serviço.

 

Essa parte está quase pronta. Por exemplo, um sistema de atualização de componentes de um tema WordPress que eu desenvolvi, via interface do Administrador, ao clicar num botão, a lista de arquivos do usuário e seus respectivos checksum's (em MD5) são enviados para www.meusite.com/wordpress/updates/nomedotema.

 

Eu comparo e retorno um XML. Esse XML só é retornado se todas as informações via POST tiverem sido enviadas E forem válidas. E dentro dessa verificação de integridade, fica a checagem se a licença do usuário ainda é válida (o que é comum em sistemas Web: vender e garantir updates gratuitamente durante 6 meses, mais ou menos).

 

Mas, como não testei a eficácia ainda queria ponderar os prós e cotras. Já que codificação por bytecode é de reversão impraticável, ela pode ser aplicada também. Mas isso garante a segurança de copyright, não de capital, já que sem um condicionamento de licença, o usuário pagaria uma vez e usaria "pra sempre" o atualizador.

 

Para esse ponto acredito que eu, como detentor do sistema deva criar meu próprio keygen para gerar as chaves de licenças que serão vendidas e mantê-lo só para mim, sempre rodando em localhost.

 

E agora que eu queria ver o que considerar para gerar uma chave de licença (nome do site que comprou, URL...) e como codificar para transformar em chave de licença (MD5, SHA...).

 

Afinal é pra isso que serve BrainStorm. ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

A idéia de codificar o código em bytes é legal, isso evita que o código seja alterado. Mas não sei até que ponto seria vantajoso e viável fazer a engenharia reversa do código.

 

Usar webservices pra checar as licenças de um sistema é viável também, mas deve-se observar alguns itens críticos como a disponibilidade do servidor que fará a checagem, pois caso ele esteja indisponível e o cliente possuir uma chave válida, poderá gerar erro e indisponibilidade do software no cliente. Outro fato a ser observado é a quantidade de vezes que essa licença é verificada, pois não seria nada interessante a cada página que a pessoa acessa ser varificada a validade da licença.

 

Eu particularmente já usei os 2 (codificação e verificação de licença), porém limitei isso a parte administrativa do sistema.

Implementei um pequeno labirinto de contas e procedimentos em locais diversos do sistema, utilizei alguns dados padrões como tamanho dos arquivos de configuração (caso fosse alterado daria problema, ou seja, caso eu fizesse alterações nele teria que ajustar a geração de licenças no servidor) e uni outros dados na geração da licença e na verificação (Tokens ou OTP - One Time Password).

 

Já vi softwares usando como retorno um simples 'OK', aí nesse caso complica mesmo, qualquer redirecionamento no servidor para uma página que retorne 'OK' tornará a licença válida. Usando uma estratégia do tipo OTP você tornaria esse processo mais complexo, pois a cada requisição retornaria uma chave diferente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.