| Kriptópolis alojado en |
| Zilos-Veloxia Network |
| Tu mejor defensa: |
| Bufet Almeida |
Las ilusiones perdidas
Yo ya no lo veré, pero en algún momento del siglo XXI el "Ministerio para la Seguridad Pública" (que por entonces contará con una "Secretaría de Estado para la Seguridad en Internet"), obligará a que todos los textos que hablen de formularios web incluyan un aviso o leyenda, que diga más o menos así:
No pierda nunca de vista que sus formularios web son interpretados por el navegador del usuario. Por tanto, no confíe nunca en que sus campos "ocultos" o sus atributos "deshabilitados" efectivamente lo sean, porque en el lado del usuario nada puede darse por garantizado ni por seguro. Por idéntica razón, nunca confíe exclusivamente en el uso de Javascript para validaciones o comprobaciones relacionadas con esos formularios.
Y es que estoy harto de leer libros sobre HTML y Javascript donde nadie aclara jamás que un campo "hidden" o un atributo "disabled" (por poner sólo un par de ejemplos) pueden ser modificados por el usuario antes de enviarse al servidor. Por el contrario, el programador web (o aspirante a serlo) puede sacar la errónea conclusión de que gracias a ellos (con o sin el complemento dinámico que puede aportar Javascript), él controla perfectamente la situación.
Eso no es así. Como es sabido, el usuario avispado puede guardar el código fuente de la página en su disco duro, editarlo para modificar a su gusto los campos (y atributos) que le parezca, reemplazar las URLs relativas por absolutas, cargar la página modificada en su navegador y enviar el contenido que le parezca al servidor. Así que más vale que la aplicación que recibe los datos haya sido pensada para contemplar esta eventualidad, y que no dé nada por garantizado.
Es sólo un ejemplo banal, y conocido por casi todos, de una situación harto frecuente: los libros sobre programación no suelen contemplar la seguridad, y los libros sobre seguridad no suelen contemplar la programación.
Y así pasa luego lo que pasa.




La difícil tarea de programar
Yo creo que el problema es que se ve al programador como simple intérprete entre la máquina y el usuario. El verdadero programador debería estar preparado con un conjunto de conocimientos tan vasto y sólido que harían de él un verdadero especialista en la rama de su desempeño.
A veces no es falta de conocimientos...
Como programador, es cierto, que muchas veces obvio bastantes "recovecos" referentes a la seguridad, pero no toda la culpa es de los programadores. La implementacion de la seguridad, es algo que no siempre es trivial, y a veces es casi mas dificil que el codigo "ejecutable". Como consecuencia, el precio del programa o web final, sube bastante, pero el cliente SIEMPRE quiere abaratar costes hasta limites en ocasiones ridiculos... "Yo solo quiero que funcione. Dejese de historias"...
Tambien es cierto, que para implementar codigo seguro para tal o cual aplicacion o web, es necesario saber los entresijos de este o aquel lenguaje... El programador deberia estar "obligado" a estudiar estos entresijos antes de ponerse a escribir codigo. Y esas cosas, estan en INet. el programador que diga que no estaba enterado de las vulnerabilidades de cualquier cosa, es porque antes de ponerse a escribir, no ha buscado bien todo lo referente a esas vulnerabilidades.
"Lo barato cuesta caro"
y agregaria..
que el encargado del proyecto que se atreva a culpar al programador por no estar enterado, es aún mas culpable; ya que es el quien dirige el proyecto.
Saludos, de chile.
Diseño
La solución es sencilla: Diseñar un lenguaje de programación inherentemente seguro.
Por supuesto no es una tarea trivial, deberá hacerse en estrecha colaboración de programadores y expertos en seguridad.
Pues si no recuerdo mal...
... ése era el objetivo de Java y su sandbox, y ya ves ...
cierto, caer para aprender
Ciertamente, cuando se hizo Java, Internet no era lo que es hoy.
Pero es muy válido como experiencia para aprender de sus fallos y así crear un nuevo lenguaje que no los tenga.
Aun así siempre habrá
Aun así siempre habrá quien implemente mecanismos de seguridad en el lado cliente...
Siempre ha sido así
Ni ahora ni nunca te has podido fiar de que la información que llega a un servidor desde una máquina remota sea de confianza. Ni tan siquiera puedes fiarte de que tu propia aplicación te retorne información correcta.
Recuerdo que en los buenos tiempos de MS-DOS había programillas que vigilaban la memoria para encontrar dónde guardaba un juego el número de vidas, la puntuación e informaciones similares.
muy cierto
Esta frase es más real que la vida misma:
En realidad, se está tratando comunmente la programación y la seguridad de formas totalmente separadas, cuando en realidad la mejor programación es la que además de agregar funcionalidades no abre nuevas brechas.
Para programar bien, lo que hay que empezar es por aprenderse una serie de buenas costumbres (o buenas prácticas) y mantenerlas siempre que sea posible. Ser capaz de saber cuando una funcionalidad por diseño estará abriendo una nueva brecha... etcétera.
En definitiva, si se quiere programar y no empezar a abrir "boquetes" en los programas, hay que tener una visión muy global de todo el producto y todo aquello que lo rodea. Y además hay que ser bastante especialista con lo que se está tocando.
Porque en realidad, aquello de programar puede programar cualquiera (cito textualmente) es bastante falso. Al final a los empresarios que piensan así terminarán pasándoles factura, entre los SQL-Injects, las ejecuciones de código arbritrarias y demás cosas que sus empleados no llegan a considerar nunca... porque programar puede programar cualquiera.
sÍ, programar, programa cualquiera
Hola, parafraseando a un encargado de tienda que tuve:
"Vender, vende cualquiera. Lo que no hace cualquiera es vender bien"
Pues eso aplicado a la programación. Cualquiera puede hacer un programita que se conecte y descargue información, otra cosa es que esté bien hecho y sea seguro.
Saludos.
Opinar