Ver Mensaje Individual
  #17 (permalink)  
Antiguo 05/05/2009, 13:50
Avatar de pabloe9k
pabloe9k
 
Fecha de Ingreso: julio-2008
Ubicación: Argentina
Mensajes: 190
Antigüedad: 15 años, 10 meses
Puntos: 3
Respuesta: "Ver código fuente"

Cita:
Iniciado por venkman Ver Mensaje
pabloe9k, el ejemplo del dinero no se parece nada en absoluto a lo que estamos hablando aquí. Es algo físico que se puede coger y llevar. La seguridad ahí está claro que es evitar que lo cojan.

Pero la seguridad de una aplicación es algo muy distinto.

Si basas tu seguridad en el hecho de que no se sepa cómo está hecho, basta averiguar cómo está hecho para que tu seguridad deje de ser segura automáticamente. Por ejemplo, pongamos que hago una aplicación web y "escondo" un campo oculto que lleva los permisos del usuario. Pienso "mientras nadie sepa que ese campo está ahí, la aplicación es segura". Pero lo que ocurre es que en cuanto alguien encuentre el campo, la aplicación pasa a ser completamente insegura.

Oh, oh, pero entonces lo que hago es que no uso un campo oculto que es muy fácil de ver. Lo que hago es una función en Javascript y el usuario debe saber el código secreto. En cuanto alguien con un poco de imaginación vea la función Javascript, va a encontrar el código.

Oh, oh, ya sé! Pero le pongo a todas mis variables y funciones unos nombres como a, aa, aaa, aaaa y y además no pongo saltos de línea y así es muy difícil saber lo que hace la función! ja!

Me costará unos 5 minutos más reformatear la función. En cuanto lo haga, veré como funciona y encontraré el código.

"5 minutos más" puede parecer que es una mejora. Ves? Es más difícil. Estoy poniendo trabas!
Pero no, la realidad es que lo único que estás haciendo es llamar más la atención sobre ese código. Es decir, estás diciendo eh, mira aquí, malvado! puede ser interesante averiguar qué hace esta función y el "malvado" tiene mucho tiempo libre y "5 minutos más" no es ni siquiera una molestia.

Oh, pero... lo ofusco! No sólo pongo esos nombres de funciones sino que ofusco el código y lo paso por un encode que ya lo hace superdificilísimo de leer.

A cualquier "malvado" eso le llama más la atención aún. Y encima los "malvados" se saben todos los truquitos facilones. Lo verá y pensará oh, lo ha pasado por un encode y lo ha ofuscado. Voy a pasarlo yo por el decode y a desofuscarlo. "5 minutos más" de nuevo, que para el "malvado" sigue sin ser nada.

Oh, y si lo encripto con DES y luego lo desencripto cuando lo vaya a ejecutar? Si está encriptado ya sí que no lo puede leer!

Claro, pero el "malvado" sabe que tú, para ejecutarlo lo tienes que desencriptar. Y entonces sabe que en algún sitio tienes que tener la función que desencripte. Así que busca esa función y la usa para desencriptar tu función encriptada.

Oh, pero y si encripto también esa función...?

La pescadilla que se muerde la cola...



El problema, al final, ¿dónde está? El problema está en que si realmente no puedes permitir que algún usuario malintencionado vea algo que hay en tu código fuente, la única opción que tienes es no ponerlo en tu código fuente. La solución es buscar otra forma de hacerlo. Una forma de hacerlo que sea segura por cómo es esa forma en sí misma, no porque esté ofuscada o esté oculta...

Lo que tú estás haciendo básicamente corresponde dejarle la maleta al usuario con el dinero metido en un doble fondo de la maleta. Puede parecer más seguro, pero no lo es realmente. Lo único seguro es no meter el dinero en una maleta que le vas a dar al usuario.

Y el peligro es que todas esas pequeñas dificultades que le pones, que hemos visto que en realidad no son seguras, lo que hacen es que tú sientas que sí que es "un poco" más seguro. Y no lo son. Pero como tú te sientes seguro, pues te quedas tan contento con esas medidas.

Insisto, no coincido en absoluto con tu forma de pensar, pero gracias por el aporte.

Saludos.