ofuscando el código JavaScript

17

Algunos desarrolladores de Flash tienen miedo de JavaScript. Su punto de vista:

Robar el código fuente de JS es fácil, uno simplemente 'vería la fuente' y lo copiaría. Sí, puede descompilar el código de bytes de Flash, sin embargo, requiere más tiempo y conocimiento. Como resultado, JavaScript no es adecuado para el desarrollo de software comercial, ya que los competidores robarán el código y pondrán al desarrollador original fuera del negocio.

¿Tiene sentido el ofuscar código JavaScript al desarrollar aplicaciones web comerciales?

¿Existen técnicas de ofuscación que realmente funcionen? ¿Las grandes empresas como Google ofuscan su código de aplicación web? Por ejemplo, ¿Gmail o Google Drive están protegidos de alguna manera?

    
pregunta hidarikani 13.05.2013 - 14:28
fuente

5 respuestas

23

Creo que la palabra clave en la pregunta aquí es "miedo". La aversión se basa en el miedo, no en los hechos. La realidad es que el modelo de amenaza no es particularmente realista. Las empresas comerciales de desarrollo de software web casi usan JavaScript en estos días, ya sea ofuscado o no, y lo desafío a encontrarme incluso un solo ejemplo de uno en el que un competidor lo haya robado JS y luego haya sido eliminado del negocio por este motivo. Estoy bastante seguro de que no ha sucedido, y tampoco es probable.

También tu segunda pregunta, ¿las empresas como Google ofuscan su JavaScript? Sí, pero no por seguridad! Se ofuscan para minimizar el tamaño del código, a fin de reducir el tamaño de la descarga y minimizar los tiempos de carga de la página. (Consulte Compilador de cierre de Google ). No es necesariamente la forma de ofuscar la seguridad porque el único objetivo es Minimice el número de bytes que deben ser entregados al cliente. Esto es en lo que debes enfocarte con JavaScript, sin preocuparte por si alguien podrá leerlo o no.

    
respondido por el Xander 13.05.2013 - 15:20
fuente
9

No. La ofuscación de Javascript por lo general no tiene ningún sentido en absoluto. Siempre asuma que cualquier lógica que coloque en el lado del cliente puede obtenerse fácilmente mediante un ataque suficientemente determinado, sin importar cómo lo ofusque.

Su lógica "importante" debe almacenarse en el lado del servidor.

    
respondido por el Ayrx 13.05.2013 - 14:32
fuente
7

Parece que ya sabes que la ofuscación no es una protección real, por lo que no te voy a enseñar sobre seguridad por oscuridad .

Lo que tiene sentido es esto: ponga su código de competencia en el servidor para protegerlo, luego ofusque el código del lado del cliente tanto como desee. Por supuesto, no te dará mucha seguridad, pero definitivamente disuadirá a los niños que están husmeando, y creará una impresión de mayor seguridad como parte de teatro de seguridad . Google lo está haciendo con GMail, Facebook lo está haciendo.

Teniendo en cuenta que su código se quedará sin enmascarar, todavía puede ofuscarlo como parte de su proceso de compilación para que sus clientes y usuarios estén más contentos.

Hay muchas herramientas que puede utilizar para lograrlo: Free Javascript Obfuscator , y JScrambler (comercial) son dos herramientas que he usado anteriormente.

Actualización: Después de una discusión sobre DMZ , hemos concluyó que sí, Google y Facebook lo están haciendo, pero probablemente solo por el tamaño del archivo y el rendimiento, y no parece haber nada que sugiera que sea parte del teatro de seguridad.

    
respondido por el Adi 13.05.2013 - 15:07
fuente
4

Por supuesto, este es un miedo sin fundamento.

Javascript es solo una parte de un ecosistema más grande, mucho más importante es la marca, la facilidad de uso del sitio, la integridad del sitio, la capacidad de respuesta y los efectos de red.

Sí, minimización de JavaScript, la optimización es buena, pero no debido a estos propósitos.

Si un competidor te roba el código, puedes legalizar sus colas y matar su reputación, ¿pero van a ser tan estúpidos (también está claro en su sitio)?

Y este argumento también se puede presentar para html e imágenes, obviamente debes eliminar todo tu sitio web porque la gente puede robarlo.

Personalmente solo me ofusco para ocultar mi código xxxxpy;) y saco los comentarios jajaja.

    
respondido por el Andrew Russell 14.05.2013 - 00:55
fuente
1

Si el código funciona, la ofuscación no vale nada. Toma este ejemplo:
Antes de la ofuscación:

function say(whatever){
alert(whatever);
}

después de:

eval(function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){while(c--){d[c]=k[c]
||c}k=[function(e){return d[e]}];e=function(){return'\w+'};c=1};while(c--){if(k[c]){p=p.replace(ne
w RegExp('\b'+e(c)+'\b','g'),k[c])}}return p}('1 3(0){2(0)}',4,4,'whatever|function|alert|say'.sp
lit('|'),0,{}))

Ahora, no mucha gente realmente intentaría entender todo ese lío, pero si quieren robarlo, no necesitan hacerlo.

La versión ofuscada se puede llamar igual que la versión original: say("hi") .

Si no sabe cómo se llama a la versión original, ubique la función / evento donde recibe una alerta y verifique si usa una función personalizada en lugar de alert , luego use CTRL + F para encontrar esta función.

Como último recurso, simplemente se deben analizar los RegEx, en mi ejemplo, la mayoría de las "ofuscaciones" son solo conversiones RegEx de nombres de funciones a nombres reales en tiempo de ejecución. Notado 'whatever|function|alert|say' ?

    
respondido por el DividedByZero 01.11.2014 - 20:48
fuente

Lea otras preguntas en las etiquetas