sirve - javascript html
¿Cómo protejo los archivos javascript? (9)
Buena pregunta con una respuesta simple: ¡no puedes !
Javascript es un lenguaje de programación del lado del cliente, por lo tanto, funciona en la máquina del cliente, por lo que no se puede ocultar nada del cliente.
Ofuscar su código es una buena solución, pero no es suficiente, porque aunque es difícil, alguien podría descifrar su código y "robar" su script.
Hay algunas maneras de hacer que su código sea difícil de ser robado, pero como dije, nada es a prueba de balas.
Por encima de todo, una idea es restringir el acceso a los archivos js externos desde fuera de la página en la que incrustó el código. En ese caso, si tiene
<script type="text/javascript" src="myJs.js"></script>
y alguien intenta acceder al archivo myJs.js en el navegador, no se le debe otorgar ningún acceso al origen del script.
Por ejemplo, si su página está escrita en php, puede incluir el script a través de la función de include
y dejar que el script decida si es seguro "devolver su fuente".
En este ejemplo, necesitará el archivo externo "js" (escrito en php) myJs.php :
<?php
$URL = $_SERVER[''SERVER_NAME''].$_SERVER[''REQUEST_URI''];
if ($URL != "my-domain.com/my-page.php")
die("//*sry, no acces rights/*/");
?>
// your obfuscated script goes here
eso se incluiría en su página principal my-page.php :
<script type="text/javascript">
<?php include "myJs.php"; ?>;
</script>
De esta forma, solo el navegador podría ver el contenido del archivo js.
Otra idea interesante es que al final de su secuencia de comandos, elimina los contenidos de su elemento de secuencia de comandos dom, de modo que después de que el navegador evalúe su código, el código desaparezca:
<script id="erasable" type="text/javascript">
//your code goes here
document.getElementById(''erasable'').innerHTML = "";
</script>
Todos estos son simples ataques que no pueden, y no puedo enfatizar esto lo suficiente: no puedo proteger por completo tu código js, pero pueden enfadar a alguien que está tratando de "robar" tu código.
Actualizar:
Hace poco encontré un artículo muy interesante escrito por Patrick Weid sobre cómo ocultar tu código js, y él revela un enfoque diferente: ¡puedes codificar tu código fuente en una imagen! Claro, eso tampoco es a prueba de balas, pero es otra valla que puedes construir alrededor de tu código.
La idea detrás de este enfoque es que la mayoría de los navegadores pueden usar el elemento canvas para realizar la manipulación de píxeles en las imágenes. Y dado que el píxel del lienzo está representado por 4 valores (rgba), cada píxel puede tener un valor en el rango de 0-255. Eso significa que puedes almacenar un personaje (real es su código ascii) en cada píxel. El resto de la codificación / decodificación es trivial.
Gracias, Patrick!
Esta pregunta ya tiene una respuesta aquí:
- ¿Cómo puedo ofuscar (proteger) JavaScript? [cerrado] 24 respuestas
Sé que es imposible ocultar el código fuente pero, por ejemplo, si tengo que vincular un archivo JavaScript desde mi CDN a una página web y no quiero que la gente sepa la ubicación y / o el contenido de este script, ¿es esto? ¿posible?
Por ejemplo, para vincular un script desde un sitio web, utilizamos:
<script type="text/javascript" src="http://somedomain.com/scriptxyz.js">
</script>
Ahora, ¿es posible esconderse del usuario de donde proviene el script, u ocultar el contenido del script y aún así usarlo en una página web?
Por ejemplo, al guardarlo en mi CDN privado que necesita una contraseña para acceder a los archivos, ¿funcionaría? Si no, ¿qué funcionaría para obtener lo que quiero?
Como dije en el comentario que dejé en la respuesta gion_13 antes (por favor, lea), realmente no puede. No con javascript
Si no desea que el código esté disponible en el lado del cliente (= descartable sin grandes esfuerzos), mi sugerencia sería hacer uso de PHP (ASP, Python, Perl, Ruby, JSP + Java-Servlets) que es servidor procesado. lado y solo los resultados de la ejecución de cómputo / código se entregan al usuario. O, si lo prefiere, incluso Flash o Java-Applet que permiten la ejecución del cómputo / código del lado del cliente, pero están compilados y, por lo tanto, son más difíciles de revertir (esto no es imposible).
Solo mis 2 centavos.
Creo que la única manera es poner los datos requeridos en el servidor y permitir que solo el usuario conectado acceda a los datos según sea necesario (también puede hacer algunos cálculos en el servidor). Esto no protegerá su código de JavaScript pero lo hará indesviable sin el código del lado del servidor
Justo en la parte superior de mi cabeza, podrías hacer algo como esto (si puedes crear scripts en el lado del servidor, que suena como puedes):
En lugar de cargar el script como de costumbre, envíe una solicitud AJAX a una página PHP (podría ser cualquier cosa, solo la uso yo). Haga que PHP localice el archivo (tal vez en una parte no pública del servidor), ábralo con file_get_contents
y devuelva (lea: echo
) el contenido como una cadena.
Cuando esta cadena regrese a JavaScript, haga que cree una nueva etiqueta de script
, innerHTML
su innerHTML
con el código que acaba de recibir y adjunte la etiqueta a la página. (Puede tener problemas con esto; innerHTML
puede no ser lo que necesita, pero puede experimentar).
Si hace esto mucho, quizás quiera configurar una página PHP que acepte una variable GET con el nombre del guión, de modo que pueda tomar dinámicamente diferentes guiones utilizando el mismo PHP. (Tal vez podría usar POST en su lugar, para que sea un poco más difícil para otras personas ver lo que está haciendo. No lo sé).
EDIT: pensé que solo estabas tratando de ocultar la ubicación del script. Obviamente, esto no ayudaría mucho si estás tratando de ocultar el script en sí mismo.
Lo único que puede hacer es ofuscar su código para hacerlo más difícil de leer. No importa lo que hagas, si quieres que el javascript se ejecute en su navegador, tendrán que tener el código.
Por lo que sé, esto no es posible.
Su navegador debe tener acceso a archivos JS para poder ejecutarlos. Si el navegador tiene acceso, el usuario del navegador también tiene acceso.
Si protege con contraseña sus archivos JS, entonces el navegador no podrá acceder a ellos, lo que le hace perder el objetivo de tener JS en primer lugar.
Google Closure Compiler , YUI compressor , Minify , / Packer / ... etc, son opciones para comprimir / ofuscar sus códigos JS. Pero ninguno de ellos puede ayudarlo a ocultar su código a los usuarios.
Cualquier persona con un conocimiento decente puede decodificar / desofuscar fácilmente su código usando herramientas como JS Beautifier . Tu lo nombras
Entonces la respuesta es que siempre puedes hacer que tu código sea más difícil de leer / decodificar, pero seguro que no hay forma de esconderte.
Lee esto Tiene una forma muy agradable de ocultar su código en ambas fuentes de vista y herramienta de depuración, como firebug.