Estoy perplejo por una solicitud de mi gerente. Trabajo para una pequeña startup y desarrollamos una aplicación web por una tarifa fija con un acuerdo de mantenimiento para una empresa MUCHO más grande. Al conocer historias de horror sobre cómo las grandes empresas solo pagarán sus facturas hasta el último segundo, decidimos que nos gustaría protegernos al poder licenciar esta aplicación web de una manera que, si no nos pagan, el software ya no funciona.
He visto esto antes para las aplicaciones de escritorio, sin embargo, esta será una aplicación web que alojarán internamente y no será accesible desde Internet.
¿Cuál es el mejor enfoque para hacer esto? Nos gustaría que tuviera una huella pequeña y que quisiéramos renovar la clave de licencia que han distribuido.
¿Alguien ha hecho algo similar? ¿Estamos completamente fuera de nuestras mentes? ¿Alguien tiene alguna sugerencia mejor?
fuente
Respuestas:
Hay muchas formas de implementar algo como esto, pero aquí hay una que no debería ser demasiado difícil de hacer:
Necesita un sitio web disponible públicamente en algún lugar que aloje un archivo que contenga los hash de las claves de licencia que se han incluido en la lista negra. La forma en que administre este archivo depende de usted, pero el archivo en sí solo necesita tener un hash por línea.
Luego, de manera recurrente, su software inicia una descarga de este archivo (la mayoría de los idiomas del lado del servidor lo proporcionan) y luego busca el hash de la clave de licencia instalada. Si se encuentra, la aplicación sabe que debe morir hasta que se elimine la lista negra.
MD5 o similar más un secreto debería ser suficiente para esto. Podrías ponerte más elegante y hacer que la aplicación envíe la solicitud a tu sitio y lo busques en una base de datos sobre la marcha, pero el archivo (por lo que supongo sería una lista corta) con suerte seguirá siendo pequeño y puede ser la forma más fácil.
La parte más difícil será mantener la aplicación muerta. Después de todo, debe almacenar esto en algún lugar interno, lo que significa que si es demasiado obvio, podría subvertirse fácilmente, e incluso si no es demasiado obvio, puede revertirse fácilmente restaurando la (s) tabla (s) adecuada (s) / archivo (s) Por lo tanto, sugiero un segundo método de protección también.
Este método almacenaría "LIVE" o "DEAD" (o algo suficientemente similar) en una tabla o un archivo, pero nuevamente HASHed. Esto debe ser mezclado con su sal Y una marca de tiempo. Cada vez que se ejecuta una página en su aplicación, verifique este valor con una versión hash de "LIVE" + salt + marca de tiempo y luego permita un rango válido de marcas de tiempo (por ejemplo, un día, dos días, una semana, un mes, etc. Tenga en cuenta que cuanto mayor sea el rango, más difícil será el rendimiento). Mientras las cosas coincidan (o se encuentre una coincidencia), la aplicación estará activa; de lo contrario, incluso si el valor en el archivo o tabla especial es "EN VIVO", seguirá estando muerto si se intenta restaurar desde la copia de seguridad porque la marca de tiempo estará fuera de su umbral.
En resumen (esto supone que tiene algún método programático para verificar la validez de una clave de licencia, como algún tipo de suma de verificación u otro método):
Ahora, Dios sabe que hay un millón de maneras en que esto puede fallar. Considere todas las formas posibles y cree un sistema confiable (incluido uno que suponga que el cliente tiene razón si el archivo de la lista negra no se puede descargar). Pruebe, pruebe, pruebe y luego pruebe un poco más antes de implementar, porque si sale mal, habrá perdido la confianza de su cliente.
fuente
license-server.example.com: no route to host
¿y ahora qué? Es posible que el servidor de licencias ni siquiera exista en algún momento en el futuro, y no me diga que su empresa seguirá viva en veinte años, eso es estadísticamente improbable.Las otras respuestas ya han hecho un buen trabajo al cubrir el aspecto técnico. Pero también tenga en cuenta el lado legal.
¿Tienes derecho a bloquear su aplicación si no pagan? Si no mencionó esto por adelantado en el contrato, es posible que no tenga derecho a hacerlo, incluso si los pagos caducan (como si no necesariamente tuviera derecho a recuperar algo que vendió). Además, muchos países tienen leyes especiales que prohíben la "manipulación de programas informáticos": lo que usted hace podría considerarse como tal e incluso podría exponerlo a responsabilidad penal.
Por lo tanto, le aconsejaría discutir esto con un abogado primero, para evitar meterse en el agua caliente.
Al final, podría ser mejor simplemente confiar en el sistema legal. Si no pagan, negocie, y si eso no ayuda, simplemente demande. En muchos países, la demanda es relativamente indolora y barata si la situación del contrato es clara (en Alemania, por ejemplo, puede obtener un Mahnbescheid por menos de 20 €).
fuente
Si están alojando internamente, ¿en qué se diferencia esto de cualquier otro software que pueda enviarles? Averigua qué harías si estuvieras enviando, por ejemplo, una aplicación de visualización de inventario de escritorio, y hazlo.
fuente
Depende del sistema. ¿Extendió un marco existente como Magneto o escribió una aplicación completa desde cero? Si es más tarde, incorporar un requisito de licencia no es demasiado difícil. Simplemente entrega la solicitud con una licencia a corto plazo, una que vence 45 días después de la facturación y luego otorga una permanente.
Esto supone que no está entregando la fuente también. :)
fuente
Dado que el sistema está alojado internamente, muchas de las soluciones mencionadas anteriormente que implican comunicarse con un servidor remoto pueden no funcionar.
¿Por qué no incluir un archivo de licencia dentro del proyecto que incluya una fecha de vencimiento? Una vez que el reloj del sistema supera la fecha de caducidad, el sistema deja de funcionar. Para asegurar el archivo, cifre el contenido para evitar alteraciones. Cuando el usuario paga o renueva por un año adicional, le envía un nuevo archivo de licencia.
Tenga en cuenta que si está utilizando PHP, el código está fácilmente disponible para que el usuario lo edite, por lo que no importa qué tipo de seguridad establezca, el usuario puede entrar y eliminarlo fácilmente. Si está utilizando ASP.NET u otro lenguaje compilado, esto no es una preocupación ya que el código no puede modificarse.
fuente
(Divulgación: trabajo para Agilis Software, un proveedor de sistemas de administración de licencias ).
La solución más efectiva es utilizar la activación automática del producto con un contrato de arrendamiento de licencia. Fuera de la caja, esto le permite:
fuente