Una idea es websockets uso para servir archivos de javascript en el navegador a través de un socket.listener
y funcionando con eval
. De esta forma, es muy, muy difícil para cualquiera ver la "fuente" real, ya que la conexión del socket ya se ha cerrado.
Hay otra táctica increíble que se puede ver en la página de inicio de http://samy.pl, que utiliza espacios (\ u0020) y pestañas (\ u0009) como cifrado de bytes para ocultar el código JS.
Si ve la fuente, sólo se puede ver 1 línea de código real JS: http://pastebin.com/e0pqJ8sB Ver por sí mismo si puede averiguar cómo funciona (no spoilers!)
En lo que ofuscadores ir, ver http://utf-8.jp/public/jjencode.html (y/u otra versión)
Este Ofuscador libre carreras del lado del cliente, y produce un galimatías que unminify.com
jsbeautifier
y ni siquiera se puede decodificar:
$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+$.$_$_+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$$_+$._$_+$.__+"(\\\"\\"+$.__$+$.__$+$.___+$.$$$_+(![]+"")[$._$_]+(![]+"")[$._$_]+$._$+",\\"+$.$__+$.___+"\\"+$.__$+$.__$+$._$_+$.$_$_+"\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$._$_+$._$$+$.$$__+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$.___+$.__+"\\\"\\"+$.$__+$.___+")"+"\"")())();
código original:
alert("Hello, JavaScript")
salida de ambos b sitios web de eautificadores:
$ = ~[];
$ = {
___: ++$,
$$$$: (![] + "")[$],
__$: ++$,
$_$_: (![] + "")[$],
_$_: ++$,
$_$$: ({} + "")[$],
$$_$: ($[$] + "")[$],
_$$: ++$,
$$$_: (!"" + "")[$],
$__: ++$,
$_$: ++$,
$$__: ({} + "")[$],
$$_: ++$,
$$$: ++$,
$___: ++$,
$__$: ++$
};
$.$_ = ($.$_ = $ + "")[$.$_$] + ($._$ = $.$_[$.__$]) + ($.$$ = ($.$ + "")[$.__$]) + ((!$) + "")[$._$$] + ($.__ = $.$_[$.$$_]) + ($.$ = (!"" + "")[$.__$]) + ($._ = (!"" + "")[$._$_]) + $.$_[$.$_$] + $.__ + $._$ + $.$;
$.$$ = $.$ + (!"" + "")[$._$$] + $.__ + $._ + $.$ + $.$$;
$.$ = ($.___)[$.$_][$.$_];
$.$($.$($.$$ + "\"" + $.$_$_ + (![] + "")[$._$_] + $.$$$_ + "\\" + $.__$ + $.$$_ + $._$_ + $.__ + "(\\\"\\" + $.__$ + $.__$ + $.___ + $.$$$_ + (![] + "")[$._$_] + (![] + "")[$._$_] + $._$ + ",\\" + $.$__ + $.___ + "\\" + $.__$ + $.__$ + $._$_ + $.$_$_ + "\\" + $.__$ + $.$$_ + $.$$_ + $.$_$_ + "\\" + $.__$ + $._$_ + $._$$ + $.$$__ + "\\" + $.__$ + $.$$_ + $._$_ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$$_ + $.___ + $.__ + "\\\"\\" + $.$__ + $.___ + ")" + "\"")())();
Espero que esto ilumine a los necesitados!
No sé si el código ofuscado es fácilmente decodificable, pero mira google javascript y trata de "robar" :) – Aif
Como dijiste, no hay protección al 100%. Yo diría que cualquiera que es lo suficientemente sofisticado para hacer cualquier cosa que vale la pena con "robado" código JS también es lo suficientemente sofisticado para eludir cualquiera que pudiera emplear para ocultar su script-agitando la mano. Es decir, es una empresa bastante inútil en mi humilde opinión. – deceze
Otra solución, muy resumida, es acoplar su javascript estrechamente con su código del lado del servidor para que, incluso si alguien robara su JS, sería demasiado trabajo para ellos usarlo ellos mismos. –