2011-06-13 17 views
6

Uso Minify para minimizar y almacenar en caché todas mis solicitudes de script. Solo quiero que mis usuarios puedan acceder a las versiones minimizadas de los archivos JavaScript.¿Cómo puedo bloquear el acceso directo a mis archivos de JavaScript?

Minify se encuentra en www.example.com/min y mis scripts están en www.example.com/scripts. ¿Cómo puedo bloquear el acceso directo al doc_root/scripts, que es donde se encuentran mis archivos JavaScript no minificados? Prefiero no sacarlos de la raíz del documento, pero es una opción.

Tenga en cuenta que estoy usando Zend Framework, por lo que la raíz real de mi aplicación se desplaza a www.example.com/public. Un archivo htaccess maneja la reescritura.

+1

¿Qué problema impide resolver el acceso directo? –

+0

Incluyo comentarios en mi código JavaScript no modificado (al igual que la mayoría de los demás). Me duele minar manualmente la implementación de mi código y asegurarse de que cargue la versión correcta. Yo uso Minify para hacer esto automáticamente, pero las versiones no minificadas todavía están abiertas. –

Respuesta

9

no puedes usar un archivo .htaccess dentro doc_root/scripts para evitar que todo el acceso a través de Internet a .js archivos a través de HTTP?

No se detendrá minify, ya que proporciona acceso indirecto.

Así que en doc_root/scripts/.htaccess, algo a lo largo de las líneas de

<Files ~ "\.js$"> 
    order allow,deny 
    deny from all 
</Files> 

Tenga en cuenta que la ubicación de los archivos .htaccess asuntos en este caso.

+0

Gracias, la regla de reescritura funcionó. Voy a aceptar esto una vez que SO me lo permita. –

4

Usted efectivamente no puede bloquear el código del usuario final. Incluso si lo sirvió con PHP u otro lenguaje del lado del servidor y las solicitudes directas bloqueadas, por supuesto todavía es posible leerlo directamente con una serie de herramientas.

Debe código con esto en mente y ser consciente con javascript comentarios, conocimiento del negocio, etc.

ACTUALIZACIÓN:

Sin embargo, si usted está hablando de código que no siempre tienen que ser a la que accedió un usuario final, podría, como lo mencionó, moverlo fuera de la raíz del servidor, o puede bloquear los archivos en su directorio (o en un directorio completo). Es fácil con .htaccess de Apache.

order deny, allow 
deny from all 

También puede redirigir los archivos de origen a las versiones minified con mod_rewrite en su archivo .htaccess.

RewriteEngine On 
RewriteRule /scripts/(.*)$ /min/$1 [L,NC] 
+0

No me importaría que pusieran sus manos sobre las versiones minificadas. Sé que cualquiera que esté lo suficientemente determinado puede darles sentido. Preferiría que no vieran los comentarios en mi código no modificado. –

+0

Oh, lo leí mal. Solo quiere bloquear los archivos fuente, no los minificados. Actualizaré mi respuesta. – dtbarne

+1

y luego no guarde la versión original sin minería en un área de acceso público. Muévalos fuera de la raíz del documento, y si no puede hacerlo, colóquelos en un subdirectorio "indescifrable" y no haga referencia a él en ninguna página de cara pública. –

0

Depende del servidor que esté utilizando. Asumiendo que es Apache, puede agregar esto a su archivo .htaccess:

<Directory ~ "\scripts"> 
Order allow,deny 
Deny from all 
</Directory> 

O algo por el estilo ..

0

La única manera es comprobar referers, y no todos los envía o envía una verdadera uno. En otras palabras, no puedes bloquear el acceso directo a cualquiera que realmente quiera algo. Es imposible determinar con 100% de precisión si una solicitud es directa o si se realiza a través de una solicitud de tipo <script src=....>.

0

Para que su Javascript funcione realmente, el navegador del usuario debe poder leerlo en última instancia. Como tal, no hay una manera real de "bloquear" el acceso a la carpeta de scripts (bueno, para ser precisos, pero eso podría romper su sitio web ya que el navegador no vería los archivos para poder ejecutarlos).

Una solución podría ser una ofuscación, lo que hace que el código javascript sea más difícil de leer/entender, pero en última instancia, el usuario verá el código y con un poco de ingeniería inversa puede desactualizarse.

Otra cosa que he visto a alguien hacer es crear una página de js.html "vacío", e insertar toda su javascript en las etiquetas de secuencia de comandos en la página (incrustado, no externos), y de su página principal hacer petición ajax ann a js.html e incrústelo en la parte inferior de la página. una especie de ronda de camino pero el usuario no verá el js cuando vea la fuente a menos que use las herramientas de desarrollo como firebug.

Tenga en cuenta que la última opción también puede causar algún retraso dependiendo del código que está cargando. pero aquí la clave no es bloquear el acceso a sus scripts, sino simplemente hacer que sea más difícil obtener/leer/copiar.

Editar: ¡Uy, también leyó mal! Creo que la mejor solución en este caso sería ir con un archivo htaccess en su carpeta de scripts denegando todo acceso

+0

Por favor vea mi aclaración. –

Cuestiones relacionadas