javascript - texto - ocultar codigo ajax
¿Cuál es el mejor ofuscador de JavaScript? (7)
Estoy buscando usar un ocultador de JavaScript. ¿Cuáles son algunos de los más populares y qué impacto tienen en el rendimiento?
Bueno, Google mencionó esto como el primer enlace:
http://www.javascriptobfuscator.com
Pero me pregunto qué hace la buena ofuscación de javascript. Sea lo que sea lo que está haciendo en javascript que necesita ofuscación probablemente debería hacerse en el servidor de todos modos, ¿verdad?
Nunca utilicé el ofuscador en producción, pero probé la utilidad JavaScript y parece bastante bueno.
En cuanto al rendimiento, el código ofuscado debe desempaquetarse sobre la marcha cada vez que se carga la página. Puede que no sea un problema para las secuencias de comandos pequeñas, pero el tiempo de desembalaje será significativo con archivos más grandes. Por otro lado, el código minificado es ejecutable directamente por el navegador.
Algunos ofuscadores pueden producir resultados que no se ejecutan en navegadores más antiguos o menos comunes. Debe probar muy cuidadosamente con los navegadores que planea apoyar.
También puede probar el compresor de JavaScript escrito por Dean Edwards.
Yahoo tiene uno bastante bueno. Es técnicamente un minificador, pero hace un buen trabajo de ofuscación en el proceso.
Tendría que decir que Hackvertor (rechazó que lo haya escrito) es gratis y admite la conversión basada en etiquetas. Mira el ejemplo:
Probé 8 ofuscadores diferentes (excepto www.javascriptobfuscator.com), y me sorprendió lo mucho que todos apestan. Terminé escribiendo mi propio ofuscador usando expresiones regulares. Disfrutar:
static Dictionary<string, string> names = new Dictionary<string, string>();
static bool testing = false;
static string[] files1 =
@"a.js,b.js,c.js"
.Split(new string[] { Environment.NewLine, " ", "/t", "," }, StringSplitOptions.RemoveEmptyEntries);
static string[] ignore_names =
@"sin,cos,order,min,max,join,round,pow,abs,PI,floor,random,index,http,
__defineGetter__,__defineSetter__,indexOf,isPrototypeOf,length,clone,toString,split,clear,erase
RECT,SIZE,Vect,VectInt,vectint,vect,int,double,canvasElement,text1,text2,text3,textSizeTester,target,Number
number,TimeStep,images,solid,white,default,cursive,fantasy,".
Split(new string[] { Environment.NewLine, " ", "/t", "," }, StringSplitOptions.RemoveEmptyEntries);
string[] extra_names = @"a,b,c".Split(new string[] { Environment.NewLine, " ", "/t", "," }, StringSplitOptions.RemoveEmptyEntries);
string src = @"C:/temp";
string dest1 = src + "//all1.js";
string dest2 = src + "//all2.js";
static void Main()
{
File.Delete(dest1);
File.Delete(dest2);
foreach (string s in files1)
File.AppendAllText(dest1, File.ReadAllText(src + "//" + s) + Environment.NewLine + Environment.NewLine + Environment.NewLine + Environment.NewLine + Environment.NewLine + Environment.NewLine, Encoding.UTF8);
string all = File.ReadAllText(dest1);
int free_index = 0;
foreach (string s in extra_names)
{
free_index++;
string free_name = "" + (char)(''A'' + (free_index % 25)) + (char)(''A'' + ((free_index / 25) % 25));
Debug.Assert(free_name != "AA");
names.Add(s, free_name);
}
Regex reg1 = new Regex("(var |function |//.prototype//.)([a-zA-Z0-9_]+)");
int startat = 0;
while (startat < all.Length)
{
Match match = reg1.Match(all, startat);
if (!match.Success)
break;
string key = all.Substring(match.Groups[2].Index, match.Groups[2].Length);
if (!ignore_names.Contains(key))
{
free_index++;
string free_name = "" + (char)(''A'' + (free_index % 25)) + (char)(''A'' + ((free_index / 25) % 25));
Debug.Assert(free_name != "AA");
if (!names.ContainsKey(key))
names.Add(key, testing ? key + free_name : free_name);
}
startat = match.Groups[0].Index + match.Groups[0].Length;
}
Regex reg2 = new Regex(@"//*.*/*/", RegexOptions.Multiline);
Regex reg3 = new Regex("([^:////])//.*/r/n");
Regex reg4 = new Regex("([a-zA-Z0-9_]+)");
Regex reg5 = new Regex("(/r/n)*[ /t]+");
Regex reg6 = new Regex("(/r/n)+");
all = reg2.Replace(all, eval2);
all = reg3.Replace(all, eval3);
all = reg4.Replace(all, eval4);
all = reg5.Replace(all, eval5);
all = reg6.Replace(all, eval6);
File.WriteAllText(dest2, all);
}
public static string eval4(Match match)
{
return names.ContainsKey(match.Groups[1].Value) ? names[match.Groups[1].Value] : match.Groups[0].Value;
}
public static string eval5(Match match)
{
return string.IsNullOrEmpty(match.Groups[1].Value) ? " " : Environment.NewLine;
}
public static string eval6(Match match)
{
return Environment.NewLine;
}
public static string eval2(Match match)
{
return " ";
}
public static string eval3(Match match)
{
return match.Groups[1].Value + Environment.NewLine;
}
Enfriador con base62
http://dean.edwards.name/packer/
https://github.com/jcoglan/packr <= versión ruby