Ver Mensaje Individual
  #4 (permalink)  
Antiguo 22/09/2014, 09:34
Avatar de nibollo
nibollo
 
Fecha de Ingreso: julio-2012
Mensajes: 22
Antigüedad: 12 años, 4 meses
Puntos: 2
Respuesta: Proteger aplicación web contra copias no autorizadas

Es lo mismo que hace facebook con sus apps, necesita una clave (key) para funcionar (que se almacene en el servidor externo) y una API que genere esas llaves, ademas haga las comprobaciones (cliente/servidor) si la llave es correcta.

Pasos

->Tu cliente debe completar el formulario con la url (a donde va alzar el codigo) eso se almacena en tu misma base de datos con tu la clave generada del mismo..

Modo Planteamiento ->
---------------------------------------------------------
url | key (clave)
www.pepitos.com | 1234567890
---------------------------------------------------------

Modo realidad (encryptadas)->
---------------------------------------------------------
url sha256 | key (clave) sha256
e0c4dc039c1e592af004f199145773f2eac81572c28b1f4d00 f8d9d6e2e78830 | c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422a b782862f268646
---------------------------------------------------------

Tu se lo das la clave, en nuestro caso real seria "c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422 ab782862f268646" y sencillamente para poder funcionar, el programa debe hacer una consulta que devuelva la url (e0c4dc039c1e592af004f199145773f2eac81572c28b1f4d0 0f8d9d6e2e78830)

y compare con la $_SERVER['HTTP_HOST'] encryptada que esta haciendo la solicitud en sha256, si son iguales fija $_SESSION con la clave[que podes encryptarlo aun mas], en caso contrario muestre un mensaje "Su copia no es original"

OJO: Todo lo anterior va incluido en la funcion login, el cliente debe estar siempre online.

Luego para poder (enviar/recibir) datos el cliente a nuestro servidor envia de esta forma..

cliente->

send.php? datos=%datos a enviar%&key=$_SESSION [en caso de que lo hayas encryptado aun mas, haces una funcion extra que compare contra tu base de datos de la misma forma en que encryptaste tu $_SESSION.]

servidor->

responde 0, si no se encontro la llave & no pudo insertar los datos.
responde 1, si se encontro la llave & pudo insertar los datos.

Con todo esto no hace falta que encryptes tu codigo fuente.

Editado:
1->En lo que deberias tener cuidado es en tu API del lado del servidor, que puede ser vulnerable a SqlInjection & Company. Lo solucionas con un filter + un .htacces
2->Y si no quieres alargarte la vida, crea software cliente y vendelo por subdominios, ejemplo. tucompany.com , cliente.tucompany.com, cliente2.tucompany.com ya que siempre debera tener acceso a internet LOL. Ahi tambien puedes aplicar lo anterior que te dije para mayor seguridad.
3->Pero si haces el 2 necesariamente deberas cuidar tu cliente de ataques, para que no entren y modifiquen el codigo con una shell.
4->Fin.

Eso es todo, espero que te sea util :)

Última edición por nibollo; 22/09/2014 a las 09:44