¿Qué tan poderoso es Java?

Después de meses de programar en Java realmente me he dado cuenta de lo increiblemente bien planeado, organizado y bien hecho que es Java, realmente mis respetos a James Gosling (creador de Java) y a todo el equipo de desarrollo, pues nunca me había topado con un lenguaje tan bien hecho.

Algunas cosas que realmente me han impresionado de Java:

  • Las clases anónimas que son clases que ni siquiera estan definidas en un archivo, sino que se heredan a una clase pero sobreescriben un método que tal vez no querías de ese modo, por ejemplo:
    jLabel1 = new JLabel("Hola") { 
        public String getText() {
            return "El texto es:"+super.getText();
        }
    });

    Lo cual haría un nuevo JLabel o sea un componente que sirve para etiquetas de texto, pero cambiaría el método getText por ese otro, lo cual devolvería por ejemplo El texto es: Hola

(más…)

El bit NX, una prevención para el desbordamiento de buffer

Después del post pasado que hablé sobre el desbordamiento de buffer (buffer overflow), ahora les diré que ya hay algunas soluciones a esos ataques.

Ya que esta vulnerabilidad es principalmente aprovechar el procesador, existen hoy en día algunos procesadores que evitan que pase un desbordamiento de buffer, el problema realmente es que no todos los sistemas operativos lo soportan, por ejemplo Windows XP sólamente lo soporta en algunos procesos críticos a partir del Service Pack 1, y se supone que en Vista agregaron mayor soporte para eso, pero por otra parte sistemas operativos como Sun Solaris lo soporta desde hace 10 años al parecer, y Mac OS y Linux desde hace algunos años, pero el problema es realmente que Windows el que es más atacado no lo soporta por completo.

Este bit se refiere a que marca un bit como No eXecute, o sea no se puede ejecutar nada pasando de ese bit, por lo que todas las técnicas de desbordamiento de buffer se ven inútilizadas, cosa que es mucho más segura.

Sobre el mismo ejemplo del río que mencioné el post pasado podríamos pensar como que cuando el agua llega a la torre de energía eléctrica no pasaría nada, simplemente estarían encimándose los datos pero no se podría ejecutar nada.

(Más información: Kriptópolis)

Desbordamiento de Buffer (Buffer Overflow)

Desbordamiento de RioAlgunos quizá hayan escuchado éste término, sin embargo probablemente no muchos sepan realmente en que consiste, asi que en éste post explicaré más o menos de que se trata.

El desbordamiento de buffer es una posible vulnerabilidad en programas hechos en lenguajes como C o C++, que puede llegar a ser tan grave como darle privilegios completos a alguien sobre un sistema operativo, es de los métodos de hackeo, uno en donde se puede aprovechar al máximo la vulnerabilidad de algun programa, y donde puede llegar a ser más crítico el problema.

Qué pasa por ejemplo cuando en un río sube el nivel del agua a un grado que no cabe el agua, pues el río se desborda y se lleva con él arboles, casas, etc. Totalmente un desastre natural, bueno en computación pasa algo parecido, pero imaginemos que el espacio en donde esta el río o sea el canal de tierra por donde pasa el río es el espacio en memoria que esta disponible para guardar algún dato, y el agua del rio es la información con la que intentaremos llenar ese espacio, si le damos más información de la que debe ser ocurrirá un desbordamiento de buffer.
(más…)

Una forma segura de manejar las sesiones en PHP

PHP seguroCuando entran a una página como al mail, sin que ustedes se den cuenta se genera automáticamente una variable de sesión, la cual sirve para identificar que una sesión esta activa, hay formas de verificar que una sesión esta activa, y con esto el servidor te da acceso o lo rechaza, una sesión no es mas que una cookie que expira en el momento que cierras el navegador.

Cada que entras a alguna página lo que valida la sesión es el servidor, asi que para que lo haga el navegador, envía las cookies pertenecientes a ese dominio al servidor, y con ésto puede identificarte.
(más…)

Regular Expressions

¿Has tenido que reemplazar a mano algunas cosas? en un texto enorme, creo que es algo muy frustrante y asi como para ti lo es, también para los programadores, o para algun diseñador, pues es frustrante estar en dreamweaver y tener que reemplazar etiqueta por etiqueta, o encontrar dentro de todo un sitio, una simple palabra.
(más…)

Square-And-Multiply

Cinta_de_Mobius_I.jpgSeguramente a estas alturas ya les habrán pedido que programen la exponenciación entera de un número para ilustrarles algunas estructuras de control, pero es muy probable que no se hayan preguntado cómo se podría hacer más eficiente una exponenciación o de plano pensaron que es lo mejor que se puede hacer (hacer todas y cada una de las multiplicaciones).

Aqui les voy a exponer un método sencillo y muy usado para exponenciar en grande de una manera más eficiente.

(más…)

¿Porqué no hay virus en Linux, Unix ni Mac OS X?

virus-computer.jpgEsto se debe principalmente a la forma en que pensaron el sistema operativo, por ejemplo en todos estos sistemas hay un usuario root, encima de cualquier otro y los permisos se basan en grupos y usuarios, hay archivos del sistema que no pueden ser modificados por nadie mas que el mismo usuario o el root.
(más…)

Backtracking

LaberintoEl backtracking es una técnica usada en computación que se resume como ir explorando un problema por todo un árbol de combinaciones, en donde forzosamente alguna de las posibles combinaciones es solución del problema. Parecida a la técnica humana cuando se quiere resolver un problema nuevo y no tan obvio, en donde sólo se conocen las reglas del problema y se tiene que ir probando por caminos diferentes para encontrar la solución.

En éste artículo se va a dar una aproximación a la estrategia.

(más…)