Bloqueio de Uso

Olá Pessoal,

Seguinte, tenho um sistem ERP em harbour (em linux), que é instalado em modalidade de locação. No executável testo se o código serial que consta na tabela “X” é igual ao do programa “executável”, e até que data a mesma é válida. Assim, caso não receba pela locação o sistema não funcionará.
No SC 7 o sistema estará instalado no servidor do cliente, como fazer para implementar um código onde lá no cliente, ninguém “olhe” este código, não retire este código de lá. Este código em PHP irá confrontar o código serial que estará no BD com o que está no código PHP, e o mesmo terá que estar dentro da validade de uso.

Att,

Jocimar

jocimar,

Existem algumas maneiras de fazer… seu cliente tem acesso ao fonte?

Se não, uma maneira eficaz seria você criar uma rotina (biblioteca) de validação em um DB externo ( web está cheio de exemplos desta natureza ) e em cada app, no evento onScriptinit, você chama essa rotina pra validar o uso ou não. Na aplicação Login poderia ser suficiente, mas facilmente quebrada a segurança.

Qual o nível de eficácia disso? Não existe 100% de proteção pra quem quer piratear alguma coisa, mas não será tão simples se: a) sua rotina for bem elaborada; b) você criptografar todos os dados (MD5); c) se você criptografar seu código, via ZEND por exemplo, etc

Existem outras formas…

Forte abraço.

Olá Jovito,

Obrigado pelas dicas!
Atualmente tenho sistema em harbour, e até hoje nenhuma empresa quebrou este esquema. Ele funciona como você mencionou.
É isto que preciso implementar no SC / PHP, mas como ?, pois o sistema será implantando no servidor do cliente.
Quanto usar o Zend para criptografar, isto seria uma solução, mas não vi nada a respeito ainda, como funciona ou como faria isto!
Então, quanto a criar uma “função” para ser chamada nas app’s é tranquilo, mas como proteger este código, pois o código irá comparar o conteúdo que está no BD no cliente, pois é passado este código mensalmente para liberar o uso, e o código que está localmente no cliente irá conferir este conteúdo com os códigos válidos que estarão como string em variáveis no próprio código. Isto faço no harbour, porém como fazer no SC/ PHP, será apenas utilizando o Zend ?, ou há outra solução ?

Grato,

Jocimar

Jocimar,

Não sei o seu nível de conhecimento de SC… mas seja qual for seria interessante que você fizesse alguns testes no ambiente de desenvolvimento…

A princípio você terá que ter dois projetos: a) Um seu, interno, pra controlar suas contas a receber, etc, etc; b) O outro o do seu cliente. Seu sistema de contas a receber ficará no seu servidor e terá uma tabela que será lida pelo sistema do cliente.

Faça uns teste com uma ou duas tabelas (cada projeto) somente pra exercitar… Crie uma rotina que deverá ser pública, então crie como uma biblioteca, que fará qualquer coisa que você quiser: ver se o clientes está em dia, ou o serial está ok, ou qualquer outra lambança que você desejar… desde que todos esses campos estejam numa tabela do seu sistema de contas a receber…

No Sistema do cliente cada aplicação terá a chamada da rotina, no evento onScriptinit, ± assim:

if(ClienteAtivo([id_cliente]) == ‘N’)
{
sc_redir(‘aplicação_sair_do_sistema_mandando_o_cliente_pagar_os_debitos.php’);
}

[id_cliente] será uma variável global gerada no momento do login.

Tente aí alguma coisa parecida com isso.

Forte abraço.

Faz no código a validação igual ao Jovito falou, o seu sistema de SC tendo acesso a sua base de clientes para
consultar o débito do mesmo e autoriza-lo a continuar executando sua aplicação ou caso não pagar bloquear
e apresentar uma mensagem a seu critério, e compra também este utilitário pra finalizar a criptografia do código gerado no SC que
vai ficar no servidor do cliente:
http://phpshield.com/index.php

Ai fica tranquilo.

Atualmente eu trabalho como o Jovito disse, eu faço a validação do serial cadastrado no sistema em um banco onde gerencio minhas licenças, se o cara ficar em débito bloqueio o uso e o sistema não permite login. Com um detalhe hoje todos os meus clientes rodam no meu servidor, mas mesmo assim achei por bem fazer este esquema e deixa-lo pronto. O ideal seria um webservice implementado com duas rotinas pelo menos, validação dos dados e bloqueio (desbloqueio) dos clientes, o meu ainda não esta como webservice eu coloquei uma conexão direta a um banco meu.

Caso o cliente não tenha internet 100% disponível ou não queira que o sistema fique aberto poderá implementar um arquivo com od dados criptografados e com validade de 30 dias por exemplo, e a cada 30 dias o cliente acessa um sistema seu e valida a renovação e faz o upload do arquivo de licença pra dentro do sistema.

Bem opções existem aos montes é questão de avaliar o que se encaixa melhor na realidade da sua empresa e a facilidade de gerenciamento.

Obrigado pelo retorno a todos, é bom saber que somos assistidos neste fórum, …

Porém o que eu preciso saber: é quanto ao código que ficará no servidor do cliente !
Como o código estará no servidor do cliente, ele não pode editar o código e excluir a rotina que irá fazer a validação do serial ?, e assim o sistema “rodar” normalmente ?, ou o código que ficará no servidor do cliente estará em código de máquina (executável), o qual não poderá ser editado / alterado. Esta é a minha dúvida, …, como deixar o código protegido de ser excluído, pois não adiantará ter o código, porém poder ser eliminado, ou na biblioteca o mesmo retornar sempre true e as chamadas que serão feitas nas outras app’s o retorno ser sempre true.

Em harbour, o sistema instalado no cliente é em linguagem de máquina (executável gerado pelo gcc do linux), então o usuário não pode editar / alterar a rotina que faz os testes se a serial é válida ou não, o rotina será executada, e a validação da serial é sempre executada, e em todos os programas chamo esta função.

Obrigado novamente,

Jocimar

A chance disso acontecer é 1 para 100.000 ou mais, ninguém fará uma coisa dessas, não vale a pena por pouco dinheiro… a não ser que ele esteja pagando uma boa fortuna por mês a você.

Mas se você, ainda assim, quiser investir em algo mais seguro então entra no site da ZEND e compra uma versão paga onde você poderá criptografar o seu código.

Forte abraço.

OK Jovito,

A questão não é só a fortuna que recebo do cliente todo mês, é a responsabilidade perante a SEFAZ, onde o cliente aponta o uso do meu sistema para documentos fiscais / livros fiscais. Acontece muitos casos onde o cliente muda de sistema, porém na SEFAZ eles não mudam e continuam apontando o seu registro perante a SEFAZ, e se o sistema não estiver “tratavado”, o cliente não pagando, e você continua respondendo perante o SEFAZ por aquele cliente ?. Como há responsabilidade solidária entre desenvolvedor X contribuinte em meu estado, então no mínimo tenho que garantir que o sistema não funcione!.
Há outras condições que tenho que garantir o da minha empresa, esta foi apenas uma. Então não trata-se apenas do que se recebe de um cliente, mas também que numa situação desta, caso a SEFAZ veja “problemas”, eles estão no direito que “cortar” meu registro de programa para habilitar empresas a emitir NFe, Cupom Fiscal, Livros Fiscais, etc, …, e os clientes que estejam apontando o meu registro terão que trocar de sistema.

Não queria ter que ficar mencionando o motivo de tal bloqueio, queria apenas saber como “esconder” o código deste tratamento quando o sistema está instalado no servidor do cliente, e já na primeira resposta você deixou claro: Zend

Caso haja outras possibilidades técnicas desta necessidade, agradeço as dicas

Novamente, obrigado pela prontidão nas dicas,

Grato,

Jocimar

Dentre todas as soluções de compilação do código php o Zend é de longe a mais cara.
Eu comprei o sourceguardian mas ainda não compilei nada com ele, aqui na empresa onde trabalho usamos ele e funciona perfeitamente.

Não tenho experiência com o IonCube ou Zend mas sei que todos trabalham na mesma linha de defesa, compilar o código em bytecode e usar o sistema deles como intermediário para executar estes código encriptados.

Qualquer um que você escolher estará bem servido, só não entre na onda dos ofuscadores de código, este além de serem facilmente revertidos não funcionam com a maioria dos scripts que são mais complexos.

Mais uma vez obrigado !

Vou buscar informações destes as novas opções ditas pelo Saulo (sourceguardian, IonCube).

Obrigado,

Jocimar

Em nossa empresa, o cliente que exigir que o sistema fique em seus servidores internos, enviamos todo o sistema em uma Máquina Virtual, sem acesso aos fontes, apenas ao banco de dados.

Cada usuário que se loga registra o acesso em nosso banco de dados que está nas nuvens, e solicita autorização para uso.

O SC tem essa versatilidade de através de conexões diferentes, acessar banco de dados em servidores diferentes.

Caroline,

Entendi que seu sistema fica em um servidor remoto ao Banco de Dados, estou certo ?.
Se entendi, nesta situação, como fica a velocidade de acesso ao BD ?

Att,

Jocimar

A banco de dados do sistema fica na Máquina Virtual junto com as aplicações SC(localhost).

A tabela que valida o uso do sistema é que fica em nosso cloud e a aplicação de login se conecta com essa tabela (conexão remota) para validar a utilização do sistema.

A Velocidade é a de acesso local.

Se o a Máquina Virtual estiver sem acesso a internet, o sistema registra localmente a falha, e no terceiro dia trava.

Criar conexões diferentes no SC não é grande vantagem porque o cliente pode acessá-la, uma vez que ele terá acesso ao DB dele e ambas as conexões estão na mesma aplicação do SC, com a mesma senha (_lib/prod). Logo, se ele tem acesso a sua conexão ele sabe o servidor, usuário e senha e pode se conectar através de uma aplicação externa e fazer o que quiser, inclusive liberar o próprio acesso.

O ideal é criar uma app blank com a conexão feita na unha pra acessar o seu DB.

Forte abraço

Jovito,

Não sei como o cliente pode ter acesso a conexão?

Ele não tem acesso ao disco da máquina virtual, nem ao login de manutenção nas conexões.

Carol,

O SC gerencia toas as conexões através de uma única aplicação - com uma única senha. Ora, se você dará permissão ao cliente de administrar a conexão dele, logicamente ele terá acesso à configuração da sua conexão.

Se você não der acesso à manutenção das conexões, então você não permitirá que ele tenha acesso também à administração do ambiente de produção, que não trata apenas das conexões (embora seja o principal tema desta aplicação).

Forte abraço.

Jovito, pelo que entendi, eles enviam uma MV ao cliente mas sem usuário e senha, então não tem como acessar os arquivos e administrar as conexões. Somente ligam e desligam a MV.

Marco,

Desculpe, não sei que é uma MV.

Forte Abraço

Máquina virtual.
Pode ser VmWare, Virtual Box (muito bom) da Oracle/SUM, e outros.