2010-11-15 57 views
22

Estoy escribiendo un motor de sitio web robusto, escalable y bastante complejo usando HTMl, CSS y JavaScript. No quiero que me timen, y me pregunto si hay alguna forma de proteger la fuente para que no se vea en el cliente.¿Cuál es la mejor manera de proteger el HTML/CSS/JavaScript propietario?

Estoy especialmente preocupado por el JavaScript, y me pregunto si puedo protegerlo alojándolo en archivos separados que no se pueden ver directamente. Tengo control total de mi servidor web, y puedo modificar cualquier configuración para acomodar.

+2

Igual que muchas preguntas anteriores, incluido [Cómo cifrar HTML, CSS y JavaScript para evitar el robo] (http://stackoverflow.com/questions/3247270/how-to-encrypt-html-css-and-javascript- para evitar el robo), [¿Cuáles son algunas buenas maneras de evitar que las personas copien mi código fuente? ] (http://stackoverflow.com/questions/2562775/what-are-some-good-ways-to-prevent-people-from-copying-my-source-code), y [¿Cuál es la mejor manera de codificar/proteger un código javascript?] (http://stackoverflow.com/questions/3904141/what-is-the-best-way-to-encode-protect-a-javascript-code). –

Respuesta

18

No, no puedes hacer eso.

Todo va al navegador (el cliente). Puedes ofuscar uglify, minify o lo que sea, pero al final es una manera fácil de "encriptar" eso de nuevo.

No puede ocultarlo tampoco, porque desea que el navegador reciba de todas las fuentes. Entonces, incluso si haces algún movimiento funky como, "cargando javascript con la inserción de etiquetas de script dinámicas y luego elimina las etiquetas de script". Bueno, eso podría funcionar para usuarios inexpertos, pero usar una herramienta como Fiddler mostrará la verdad otra vez.

8

Bueno, la respuesta popular será "no lo pongas en la web". Sin embargo, puede ofuscar tanto su javascript que, normalmente, nadie se molestará en robarlo. La eliminación de nombres de funciones y variables, etc., es muy útil. En general, será más fácil comenzar desde cero.

+1

Esa será probablemente la solución que decida explorar. – user161190

+0

Tener todo su javascript en un archivo también es bueno para el rendimiento y la ofuscación, tal vez podría incrustar y ocultar su JS personalizado dentro de una biblioteca de JS bastante común e incomparable como jQuery. Es poco probable que alguien se dé cuenta. –

+1

@Andrew M, acabas de darte cuenta. –

11

Simplemente no puede hacer eso. La ofuscación de su javascript y CSS con un minimizador es probablemente lo más cercano que puede obtener.

+0

-1 Eso no ayudaría en absoluto, hay embellecedores que desenredarán el código tan rápido como lo puedan ofuscar. – Ben

+6

@Steve - Sí, hay herramientas para deshacer la minimización, pero aún así no generarán funciones significativas y nombres de variables de la basura. Entonces, el código será algo más legible, pero aún difícil de descifrar. –

5

No puede ponerlo en Internet, o mantenerlo accesible solo a través de una intranet; pero no hay forma de evitar de manera confiable que el cliente acceda al html/css/JS, sin impedir que acceda al sitio.

La ofuscación impedirá los intentos casuales y la búsqueda de curiosidad, pero no evitará un atacante/navegador determinado, ya que todo está implementado en el lado del cliente.

3

Puede usar un ocultador de JavaScript. Hará que el código sea difícil de leer. Todavía pueden "estafarlo", pero sería muy difícil de entender y, por lo tanto, modificarlo. No hay forma de que puedas ocultar el código por completo.

33

Independientemente de cómo se ofusque el código, cualquiera puede replicar lo que está haciendo con solo verlo. Puede tardar un poco más escribirlo desde cero, pero no hay mucho que pueda hacer al respecto.

Sus únicas opciones verdaderas para la protección implican la protección del código y, posiblemente, la presentación de una patente. Si lo que estás haciendo es realmente diferente, entonces una patente es probablemente la mejor manera de hacerlo.

Normalmente, el valor en su aplicación realmente será en el área de soporte. En otras palabras, la gente lo comprará si siente que estará cerca el tiempo suficiente para apoyarlo. Tenga en cuenta esto a medida que lo precio.

Vas a encontrar que habrá algunos que simplemente robarán tu código y lo reutilizarán. No se preocupe demasiado por ellos, ya que no iban a pagar clientes de todos modos. En cambio, facilite a sus propios clientes comprar y usar sus cosas. Asegúrate de brindar soporte; de ahí es de donde vendrá el valor real.

+1

Esta no es la primera respuesta como esta, pero Chris está en lo cierto. Si lo que estás haciendo es realmente algo único, licenciar y patentar es la ruta a seguir. No podrá evitar que alguien recupere su código, independientemente de cómo lo ofusque. Además, corre el riesgo de verse mal ante el resto de la comunidad de desarrollo haciendo un intento fallido de ocultar lo que está haciendo. –

5

La minimización de su HTML, CSS y JavaScript ayudará un poco, pero las personas siempre pueden reformatearlas.Su mejor apuesta es si los contenidos enviados a los clientes no son los mismos que los contenidos originales con los que está trabajando.

que se pueden conseguir por:

  • generar el código HTML de algún marco
  • generar el CSS a través de SASS/LESS, etc.
  • mediante un JavaScript compilador en las secuencias de comandos (es decir, de Google Closure Compiler)

Sin embargo, con todos ellos, solo hay tan lejos que puedes ir. Compilar su JavaScript hará que sea más difícil seguir sus intenciones originales, pero probablemente no sea lo suficientemente difícil si alguien se decide a realizar ingeniería inversa.

29

Haga exactamente lo contrario, libere su código como código abierto con una licencia MIT/GPL. Adjunte su nombre (comercial) al código y sea conocido como el primero en crear la aplicación X. La reputación lo lleva mucho más lejos que los intentos inútiles de "proteger su código".

  1. JS/Html/CSS es generalmente bastante fácil de retroceder en la ingeniería, no necesitan mirar su código en absoluto.
  2. Lo más probable es que las innovaciones de JS ya existan y hayan sido escritas en 2001 por otra persona.
  3. Cuanto más complejo es el código, más difícil es robar la propiedad intelectual, especialmente si lo abre.

No hay realmente ninguna razón sensata para proteger el código en lo que respecta JS/CSS/HTML, lo mejor que puede hacer es proteger su lógica de negocio, manteniendo que en el backend.

primer ejemplo, podría escribir mi propia aplicación de CKEditor (a mucha gente hacer eso), pero es un heck de mucho más fácil usar CKEditor y todo el mundo sabe lo que es, quién lo escribió etc.

O tome google maps como ejemplo, hay muchos clones alrededor, pero solo hay un google maps real. Diablos, otros habían escrito una implementación de mapas antes de google, pero Google Maps es más conocido.

Podría seguir con muchos ejemplos de por qué tratando de proteger su código no solo es tonto, sino que en realidad no es inteligente ... Proteger la lógica de negocios es una cosa, pero en realidad tiene más que ganar publicándose en público código frontend elegante smancy ...

2

He pensado mucho sobre este problema y, francamente, no hay mucho que se pueda hacer. Lo mejor que he encontrado es usar un compilador JS.

Teóricamente, y en realidad nunca he hecho esto, pero sí sé que es posible , podría ser posible cargar sus js a través de un SWF de 1x1 píxeles, que a su vez fue enviado a través de un codificador. Todavía es posible evitar eso, pero se vuelve más más molesto. Luego, podría enviar un código encriptado aes al swf, descifrarlo del lado del cliente (usando las librerías as3crypt) y luego escribirlo en el navegador. Dicho esto, a menos que esté utilizando el swf para una serie de devoluciones de llamada, aún así tendrá el problema del hecho de que todavía tendría que ser escrito en el navegador.Firebug y las otras consolas js de los navegadores le permitirían al usuario obtener los js "compilados". Por supuesto, es posible escribir AS3 para registrar la serie de devoluciones ...

Como ya he dicho, esto es más hipotético que no, y aunque no tengo dudas de que podría funcionar en situaciones idílicas, Flash es limitado y necesitarías conocimiento de AS3. El beneficio, por supuesto, es que esta es una forma de obtener js para el navegador sin que el usuario pueda leerlo fácilmente.

1

Realmente no creo que sea posible ocultar el código JavaScript del usuario final, JavaScript se hace del lado del cliente, no del lado, lo mejor es ver el código fuente en texto plano o tener un programa de terceros que intercepte el navegador , usuario final, requiere el código para completar la tarea.

Incluso si está encriptado, en algún momento tendrá que estar sin cifrar para que el navegador complete y muestre la tarea, donde el usuario final obtendrá el código, a menos que tenga un control completo y total sobre la computadora del usuario final que oculta cualquier código que se ejecuta desde el lado del cliente sería imposible.

Cuestiones relacionadas