martes, 8 de junio de 2010

¿Qué son las vulnerabilidades SQLi?

Una vulnerabilidad SQLi es una vulnerabilidad por inyección de SQL.

Básicamente, lo que significa, es que alguien puede meter información inesperada en las cajas de texto de tus formularios HTML (input) y que, si no es bien tratada por tu programación, podría llegar a introducir o leer información de la base de datos.

Casi siempre se intenta utilizar, esta vulnerabilidad, para lograr entrar con un usuario autorizado en la zona privada de tu web.

Se supone que el contenido de los campos "password" de los formularios serán "pegados" en tu programación para formar una SQL, que luego será lanzada contra la base de datos para saber si un usuario está autorizado o no. Alguien puede intentar poner un "password" "trampa" que haga que esa consulta SQL construida siempre sea cierta aunque no se sepa realmente la "password".

Si la programación (esto es cosa vuestra) no está bien realizada, podría ocurrir que cualquiera sin saber la contraseña entrase en esa zona privada.

Simplemente, échale una ojeada al código que construye esas SQL o comprueba que las "password" introducidas no tengan espacios en blanco, o comillas simples, o comillas dobles, o un igual (suelen ser los caracteres que se utilizan para hacer inyección SQL).

Aprenda Web Services en 20 minutos

Aprenda WS (Web Services) en 20 minutos ;-) La primera unidad didáctica no la facturo.

Para desarrollar un WS sólo es necesario un servidor web y una tecnología para desarrollarlo. En teoría se podría desarrollar con C (como un CGI) o con PHP, pero es complicado hacerlo.

Digamos que lo más natural/lógico es desarrollarlo en JAVA y publicarlo en un servidor J2EE: un Tomcat, un JBoss, un SJSAS, un WebLogic, etc.

Antes de desarrollarlo habría que seleccionar también una implementación (podría ser Apache AXIS1, Apache AXIS2, Apache CXF, SUN Metro, etc.)

También si se va a utilizar (esto es muy común y todos las implementaciones anteriores lo permiten) el API estándar JAX-WS.

Luego, crear un WS es tan "sencillo" (evito la lógica de negocio) como crear un interface JAVA:
package com.organizacion.webservice.personasactual;

@WebService(name="PersonasActualService")
public interface PersonasActualService {

@WebMethod(action = "validarContrasenaAdministrativa")
@WebResult(name = "contrasenaAdministrativaValidada")
public int validarContrasenaAdministrativa(@WebParam(name="nipPersona") int nipPersona, @WebParam(name="contrasena") String contrasena);

}
y la clase JAVA que lo implementa:
package com.organizacion.webservice.personasactual;

@WebService(endpointInterface="com.organizacion.webservice.personasactual.PersonasActualService")
public class PersonasActualServiceImpl implements PersonasActualService {

public int validarContrasenaAdministrativa(int nipPersona, String contrasena) {
int contrasenaAdministrativaValidada = -1;
//TODO: lógica de negocio
return contrasenaAdministrativaValidada;
}

}
Empaquetamos en un WAR y lo desplegamos en el servidor de aplicaciones.

Esto que parece muy sencillo... realmente lo es, lo que no quiere decir que no requiera esfuerzo/tiempo hacer toda la lógica de negocio y montar lo necesario (la estructura) para crear el primer WS.

sábado, 5 de junio de 2010

¿Qué motiva a los trabajadores?

He encontrado un artículo sobre la "motivación de los trabajadores", que es un tema que subyace en toda filosofía de "crear buenos ambientes en el trabajo":

http://www.infoq.com/news/2010/02/what-really-motivates

Lo que dice el artículo es que, el reconocimiento ya no es el factor más importante, sino que lo más importante es sentir el progreso (el avance).

"En los días en que, los trabajadores, tienen la sensación que están avanzando en sus puestos de trabajo, o cuando reciben el apoyo que les ayuda a superar los obstáculos, sus emociones son más positivas y su impulso hacia el éxito está en su "pico más alto". Sin embargo, en los días en que sienten que están "girando ruedas", o encontrando obstáculos para el logro, su estado de ánimo y su motivación son más bajos."

Los pequeños avances son el factor de motivación por excelencia. Aun así, el estudio en que se basa el artículo señala que el reconocimiento es un factor de motivación muy valioso.

El Top-ten de los factores motivadores son:

1. Logros
2. Posibilidad de crecimiento
3. El trabajo en sí mismo
4. Reconocimiento
5. Promoción
6. La supervisión técnica
7. Responsabilidad
8. Relaciones con los compañeros
9. Relaciones con los subordinados
10. Salario

Creatividad en el trabajo

Algunos modelos de negocio se sostienen en la creatividad. Pero las empresas no son creativas, los creativos son sus empleados. Los creativos necesitan de sus "musas", así que las empresas deben estimular a sus empleados para que estas "musas" aparezcan.

Estas empresas deben invertir en I+D+i+c (siendo la última c=creatividad). Un ejemplo de empresa de este tipo es una famosa empresa aragonesa: Imaginarium. Google podría estar cerca de este modelo, pero no es exactamente "su modelo".

Otros modelos, en las antípodas de los anteriores, deben intentar que lo que aparezcan no sean las "musas", pero las "musarañas", entre sus empleados.

La Administración, en general, está más cerca de este segundo modelo que del primero. No es necesario que invirtamos en (I)nvestigación, ni en (i)nnovación, ni en (c)reatividad para sacar adelante nuestro (D)esarrollo. Aunque, si queremos intentarlo, no seré yo quien diga que no...

Os recomiendo este vídeo sobre "El poder del tiempo libre" (con subtítulos en castellano y donde se menciona a Google y a otras empresas que tienen fórmulas del tipo 20% Google):

http://www.ted.com/talks/lang/spa/stefan_sagmeister_the_power_of_time_off.html

Más sobre cómo se trabaja en Google 1, 2 y 3 (en el 2 es donde se habla del 20% Google):

http://www.youtube.com/watch?v=q6XNkFzaDGY&feature=related
http://www.youtube.com/watch?v=P7PPGt7HbWE&feature=related
http://www.youtube.com/watch?v=h6ML1e0-LAk&feature=related

Otro donde se cuenta cómo es un día de trabajo en la sede central de Google:

http://www.youtube.com/watch?v=Mb57aaM1JfU&feature=related

Ahora uno muy divertido sobre posiblemente, el "peor" trabajo del mundo:

http://www.youtube.com/watch?v=Q4BZPxu33Ww

El cliente es una parte más de nuestro equipo

Esta claro que el cliente es una parte más de nuestro equipo, pero esto lo hemos impuesto nosotros, nuestra metodología, y no él. Aquí es donde surgen los problemas.

¿Cómo implicamos, comprometemos podríamos decir mejor, al cliente como un actor más en el -su- proyecto? Con imaginación, diría yo.

Debemos tratar de convencerles que son la parte más interesada en conseguir que el proyecto tenga éxito y que esto pasa por participar a lo largo de toda la vida del mismo.

Quizá en un primer momento recoja este testigo con ilusión, pero si no sabemos "mantener las brasas encendidas" esta ilusión se irá apagando. El cliente acabará pensando: "sólo estoy perdiendo tiempo en metodologías, tareas, jergas extrañas (scrum, sprint, backlog,...), etc. que no entiendo y estos tipos listos además quieren que me haga responsable de probar el producto porque ellos realmente no lo están haciendo".

Yo creo que tengo la solución: si queremos implicar al cliente nosotros debemos hacer "exquisitamente" bien nuestra parte del trabajo. Entregar sólo funcionalidades testadas con minuciosidad, con tanta minuciosidad que podamos permitirnos el lujo de incluir "fallos" controlados para verificar que el cliente se los encontrará en sus pruebas y nos los reportará, que nosotros resolveremos increíblemente rápido (al minuto de haberlos reportados) y que, además, le felicitemos por ello. El reconocimiento es la clave.

¿Qué os parecería recompensar, económicamente o de alguna otra forma, al cliente cada X problemas encontrados en su fase de prueba? Realmente todos estaremos consiguiendo una ventaja en ello, ¿no?

OpenData y el desafío de los datos abiertos y enlazados

Hace unas semanas, el Gobierno Vasco, se presentó en el Tecnimap 2010 (Zaragoza) el portal:

http://opendata.euskadi.net

Se trata de una iniciativa que tiene como objetivo el exponer los datos públicos que obran en poder de la Administración, para que puedan ser utilizados por terceros. Claro, todos aquellos datos no sujetos a restricciones de privacidad, seguridad o propiedad.

Esta iniciativa, de liberar la información que posee la Administración, no es nueva. Todos conocemos el portal http://data.gov (promovido por el propio presidente de los EE.UU. Barack Obama) o el portal británico http://data.gov.uk (promovido por Tim Berners-Lee).

Hablado de Tim, en una reciente presentación de los TED 2009, Berners-Lee dio una charla muy interesante sobre el tema:

http://www.ted.com/talks/lang/spa/tim_berners_lee_the_year_open_data_went_worldwide.html

También, en la Expo 2010 sobre Gobierno 2.0 Tim vuelve a hablar de lo mismo, convirtiéndose "de facto" en el promotor de esta tendencia. Primero enlazó documentos y ahora pretende enlazar datos. Está presentación es tan apasionante como la anterior:

http://www.youtube.com/watch?v=ga1aSJXCFe0&feature=PlayList&p=C92663271D02C277&playnext_from=PL&index=23

Primero fue el software abierto y ahora la tendencia es: "abrir los datos".

Hace poco, un proyecto aragonés (más concretamente, 4 amigos de Zaragoza) se ha llevado un premio en el desafío de datos abiertos con una aplicación para móviles.

http://www.dndzgz.com/web/index.html

Se basa en datos "abiertos" que publica ¿el propio Ayuntamiento de Zaragoza? sobre los autobuses (dónde están las paradas), bizi, wifi y tranvía. Quieren ampliar las categorías, poco a poco...