Olá amigos!
Neste artigo vou mostrar como criar uma proteção baseada em licenças para distribuição de sistemas via web, implementando o IHttpModule. Vamos supor que você queira fazer um sistema web, para ser ativado a partir de uma chave, similar a chave de ativação do Windows. Caso a chave esteja incorreta, será exibida uma mensagem em todas as páginas web, conforme a figura abaixo.
Imagem de exemplo de mensagem de ativaçãoImagem de exemplo de mensagem de ativação
O IHttpModule é o módulo Http chamado sempre que houver uma requisição em seu sistema Web. O IHttpModule é geralmente utilizado para implementar uma camada de Segurança, Log de acesso ou cabeçalhos/rodapés personalizados. Neste artigo vou exibir uma mensagem de ativação de licença, mas poderíamos personalizar para exibir um cabeçalho e rodapé similar ao do Imasters, sem utilizar a master.page.
Crie uma novo site web no Visual Studio, em seguida, crie a pasta App_Code.
Crie agora um arquivo "Class" chamado protecao.vb.Vamos marcar que estamos implementando o módulo IHttpModule.
Public Class protecao
Implements IHttpModuleApós digitarmos "Implements IHttpModule" e apertarmos "enter" será automaticamente criado no Visual Studio os métodos Init e Dispose.
Agora, vamos escrever a mensagem que aparecerá caso o usuário não tenha a licença correta de uso da sua aplicação web.
Mensagem de ativaçãoMensagem de ativação
Nesta função abaixo você pode configurar a sua mensagem de licença. Ao invés da mensagem de licença, você pode implementar um rodapé ou cabeçalho personalizado para seu site por exemplo.
Private Function mensagemlicenca() As String
Dim sMsg As String = String.Empty
sMsg = "<div style=""display: block; padding: 10px; border: solid #ff0000 5px; " & _
"background-color: #cfcfcf; font-weight: bold; text-align: center; z-index: 10000; " & _
"position: absolute; top: 50px; " & _
"font-family: verdana; font-size: 15px; ""> " & _
"Este site é shareware e não possuí uma licença de operação. " & _
" </div>"
Return sMsg
End FunctionRecomendo colocar o estilo direto na div neste caso, e não em um CSS, pois o usuário poderia ocultar a div facilmente no CSS com display: none; Recomendo também não colocar id nem class nesta div para não ser possível ocultar a div via o arquivo css do site!
Após criada a mensagem, vamos criar a nossa lógica de ativação do sistema. Nesta função eu chamo a chave de ativação do sistema direto do web.config. Você poderia implementar de diversas outras formas, como lendo um arquivo .lic (texto), ou verificando o domínio de requisição através de um webservice, entre muito outros. Estou neste caso fazendo da forma mais simples para que seja de fácil entendimento.
Private Sub ativarlicenca(ByVal sender As Object, ByVal e As EventArgs)
Dim oApp As HttpApplication = DirectCast(sender, HttpApplication)
' Recupero a chave do meu web.config
Dim sMinhaChave As String = System.Configuration.ConfigurationManager.AppSettings("licenca").ToString
If oApp.Context.Response.ContentType.ToLower() = "text/html" Then
' !!! Aqui você pode fazer uma validação mais apurada.
' !!! usando algum algorítimo seu, criptografia...
If String.Compare(sMinhaChave, "QRFFD-1090S-ERDFV-CSARE-000010") <> 0 Then
' Exibo a mensagem da minha função de HTML
oApp.Context.Response.Write(mensagemlicenca)
End If
End If
End SubApós criada a nossa função de ativação, só nos resta chama-la na inicialização de cada requisição Http. Para isto eu adiciono um Handler endereçado para a nossa sub ativarLicenca.
''' <summary>
''' Inicialização do IHttpModule
''' </summary>
''' <param name="context"></param>
''' <remarks></remarks>
Public Sub Init(ByVal context As System.Web.HttpApplication) Implements System.Web.IHttpModule.Init
AddHandler context.PostRequestHandlerExecute, AddressOf ativarlicenca
End Sub
''' <summary>
''' Obrigatório para implementar IHttpModule
''' </summary>
''' <remarks></remarks>
Public Sub Dispose() Implements System.Web.IHttpModule.Dispose
End Sub
Após a nossa classe estar pronta, temos que configurar o web.config para que ele possa chamar a nossa proteção.
Na tag "Configuration" ? appSettings devemos criar a nossa chave de licença.
<appSettings>
<!--
Coloquei o código abaixo para a mensagem sumir!
Código Correto : value="QRFFD-1090S-ERDFV-CSARE-000010"
-->
<add key="licenca" value="ERRADO-QRFFD-1090S-ERDFV-CSARE-000010"/>
</appSettings>A nossa chave correta é: QRFFD-1090S-ERDFV-CSARE-000010, coloquei um "Errado-" para que você possa ver a mensagem de licença quando executar o seu asp.net.
Em seguida devemos configurar o HttpModule, para nossa chave de proteção
<httpModules>
<add name="protecao" type="protecao" />
</httpModules>No seu sistema, você pode criar uma segurança que obrigue o responsável pela instalação do sistema a configurar o httpModule, utilizando por exemplo uma variável session que é lida por outros arquivos chaves de sua aplicação. Caso o valor da variável não exista, você pode não executar algumas rotinas vitais para o seu sistema. Assim adquirir a licença para a ser obrigatório para o uso do sistema.
Recomendo também colocar a nossa classe proteção.vc em um Projeto de classe separado, para ser compilado com obfuscador, tornando o seu sistema ainda mais seguro. Por fim, como sabemos, no mundo do software nenhuma segurança é 100% impenetrável. O que podemos fazer, e nos aproximar cada vez mais do ideal.
Por hoje é só amigos. Nos próximos artigos mostrarei como criar um sistema de log, utilizando também o Httpmodule, e como gerar arquivos .ZIP / Tar em tempo de execução.
Clique aqui para dar download no projeto de exemplo.
Forte Abraço.
Os textos publicados neste espaço são de responsabilidade única de seus autores (colunistas e leitores) e podem não expressar necessariamente a opinião do iMasters.
Thomas Alexander Semple é engenheiro eletrônico com ênfase em telecomunicações e é líder de projetos da T4W. Com mais de 10 anos de experiência, participa de projetos para empresas dos mais diversos segmentos. A T4W (www.t4w.com.br) é uma empresa de tecnologia onde sua área de desenvolvimento vem atendendo empresas de médio e grande porte em projetos corporativos e especiais. Thomas A. Semple também escreve periodicamente para as revistas .Net Magazine e Web Mobile.
2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.