Foros del Web » Programando para Internet » PHP »

Script JS en php, seguridad ante modificación cliente.

Estas en el tema de Script JS en php, seguridad ante modificación cliente. en el foro de PHP en Foros del Web. Hola!, hace mucho que no escribía por aquí ^^ Umm... a ver si me explico bien: Os agradecería mucho si me comentáseis si veis que ...
  #1 (permalink)  
Antiguo 15/09/2008, 06:40
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 6 meses
Puntos: 1
Script JS en php, seguridad ante modificación cliente.

Hola!, hace mucho que no escribía por aquí ^^

Umm... a ver si me explico bien:

Os agradecería mucho si me comentáseis si veis que esto es seguro, es decir, funciona o simplemente no vale para nada ^^! .
No estoy muy puesto en ediciones de JS en cliente, es decir, cosas como GrasseyMonkey, etc, que puedan editar los scripts e inyectarlos en la página (no sé cómo va eso).

---
Primero hablando desde php: genero un script JavaScript que incluye a su vez otro archivo JS generado con php.

Lo hago así porque necesito en ambos funciones de php, el archivo, digamos padre, es un contenedor que sirve para minimzar y comprimir al que se incluye (es pesadillo pero sólo es en desarrollo).

Así:
(php) Script Javascript Compresor (Compresor y minificador) -> (php) script fuente.

Seguridad:
En vez de incrustrar php directamente en el script fuente, he decido establecer todo tipo de variables en una «cabecera» php para luego usar sólo código javascript basado en esas variables.

O sea, por ejemplo:
[Cabecera php en script fuente]:
var isAdmin = <?php echo (es_administrador()) ? 'true' : 'false';?>;

[Cuerpo del script]:
if ( isAdmin == true )
accion;

LAS PREGUNTAS:
1. Según entiendo, este script se podría modificar para setear isAdmin en true, saltándose el estableciemiento mediante php... no?.

Así que lo he pensado es comprobar desde el script contenedor los archivos incluidos mediante get_includes_files() -sí, también es muy pesado :( -

Como el acceso es al script padre, no se puede editar el código ya que es un inlcude, y si no lo es, es decir: editan el script padre, detectará que es un archivo directo, o sea, que no se incluye nada.

Aunque ahora que lo pienso, al salir como JavaScript, el lado servidor ha muerto... y esa validación no vale para nada... joder :(

Bueno, yo pongo el código y a ver si alguien me arroja algo de luz sobre seguridad en JavaScript y de paso en AJAX :S
Dejo los comentarios para ilustrar mis impresiones :D

Código PHP:
$scriptName 'cmsScript.js';
    
$scriptMinName 'cmsScript.min.js';
    
/**
     * Descomentar vMin para obtener la versión minificada:
     * JSMin, según apache ab, tarda un 50% más de tiempo para minificar.
     * Así que o cacheamos (ver proyecto de google) o guardamos ya minificado.
     */
    
include_once $scriptName;
    
//vMin: include_once $scriptMinName;

    /**
     * Seguridad: Comprobamos que el script sea un archivo incluido.
     *
     * Así, supongo que se evita que se pueda editar el script directamente, 
     * ya no incluirá ningún archivo, sino que será un script directo.
     * Tampoco podrán editar CmsScipts ya que este archivo siempre llamará
     * a la versión local del servidor, no a nada del cliente.
     */
    
$includes_files get_included_files();
    if ( 
in_array(dirname(__FILE__) . '/' /*vMin$scriptMinName*/$scriptName$includes_files) ) {
        
$output .= JSMin::minify(@ob_get_contents());
        
//VMin: $output .= @ob_get_contents();
    
}
    
ob_end_clean();
    
$output .= "\n" '//]]>';

    echo 
$output;
}
// Vaciando el buffer en cualquier caso:
ob_end_flush();?> 
CONCLUSIÓN:
Me temo que siempre que sea en el cliente, sólo podremos asegurar secuencias mediante cookies y tal, no?.
O eso, o no dar salida a código con sentencias de seguridad, sino validar en servidor y dar salida sólo a código de ...renderización, por decirlo así ^^.

Muchas gracias de antemano.

PD: Todo este pollo es para intentar tener una versión más limpia en JavaScript sin mucho php incrustado. E incluso poder usar otras librerías que puedan minificar y comprimir una salida JS (me da problemas de codificación si comprimo).
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org

Última edición por Covids0020; 15/09/2008 a las 06:52
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:38.