# data[].attributes.attachment_link.readable_text
Cada vez dependemos más del software. Está en todas partes, y no solo dentro de nuestras pantallas. Algunos fallos pueden ser catastróficos, y especialmente todos los que tienen que ver con la seguridad y la privacidad, que van siempre muy relacionadas.

A pesar de ello sigue siendo muy frecuente que los programadores no tengan la seguridad presente todo el tiempo mientras desarrollan.

En ocasiones la actitud de los programadores hacia la seguridad es que ésta es cosa de la gente de sistemas, con sus cortafuegos, IDS y demás medidas de control. Sin embargo la mayor parte de las vulnerabilidades de seguridad tienen que ver con el código y cómo está escrito.

Es indispensable hacerse a la idea de que la seguridad debe tenerse en cuenta en todas las fases de desarrollo de un proyecto de software, y no ser un pensamiento posterior, cuando ya lo principal está desarrollado.

Por eso hemos recopilado los 5 principales consejos sobre seguridad que deberías tener en mente siempre mientras programas, y que te ayudarán a conseguir sistemas más confiables y seguros:

1. Jamás te fíes de ningún dato. Este parece obvio, pero luego no siempre se tiene en cuenta. Cualquier dato que llegue a tu código desde un sistema del que tú no tienes control debe ser considerado sospechoso por defecto. No llega con validar en el lado cliente los datos que introducen los usuarios, siempre debe validarse en el servidor también. Si recibes una cadena de texto ten en cuenta todas las posibilidades, incluyendo símbolos "raros", la longitud máxima que esperas (no se vaya a producir un desbordamiento), que estén intentando colarla a la base de datos para inyectar instrucciones SQL. Verifica todos los datos siempre. Punto. Es un fastidio pero es la regla número 1 de cualquier sistema seguro.

2. Almacena exclusivamente lo que necesites. Ni un byte más de lo necesario. Cuando almacenas información que no necesitas estás ampliando la superficie de ataque posible. No solo nos referimos a almacenar esos datos en una base de datos o en un almacenamiento permanente (que también), sino incluso en memoria. Por ejemplo, un caso muy habitual es almacenar las contraseñas de los usuarios en claro en la base de datos. Esto aparte de ser un agujero de seguridad clarísimo es ilegal (al menos en Europa debido a las leyes de protección de datos). Almacena solamente un resumen digital de las claves y que ni siquiera vosotros las conozcáis ni podáis recuperarlas.

3. No reinventes la rueda. Y lo anterior nos lleva a otro fallo muy común que es el síndrome de "No inventado aquí". Hay programadores (y empresas) a los que no les gusta que haya código ajeno en sus desarrollos, y al final acaban por hacer por su cuenta cosas que están solucionadas hace tiempo. Aparte de ser un error empresarial, es un error importante cuando se trata de esquemas que tienen que ver con la seguridad. La encriptación, los resúmenes digitales, etc... están basados en matemáticas complejas, se producen avances constantemente, y tenemos la suerte de vivir en la era del Open Source, así que -especialmente en seguridad- haz uso de alguna de las maravillosas bibliotecas existentes y probadas. Incluso aunque se descubra algún fallo en algún momento van a funcionar mejor que cualquiera que puedas hacer tú.

4. Limita los privilegios: lo más fácil, por ejemplo, es crear un usuario con acceso como administrador a la base de datos y utilizarlo desde nuestro código. Así nos evitamos errores por falta de permisos o el tener que hacer un ajuste fino tabla por tabla, campo por campo, para fijar los privilegios exactos que ese usuario necesita. El problema es que cuando se produce un problema de seguridad, nuestra aplicación actúa de intermediaria entre el atacante y la base de datos, dejándole las puertas abiertas de par en par. Grave error. Pues lo mismo en cualquier otro ámbito de la aplicación: hay que proporcionar a cada usuario o proceso los privilegios exactos que necesite, y ni uno más. Es más trabajoso pero hará tus aplicaciones mucho más seguras.

5. La seguridad es una carretera de dos sentidos. Esto es algo que se piensa mucho menos todavía que lo anterior. Cuando un usuario "normal" se conecta a nuestra aplicación de banca, por poner un caso extremo, no solo debemos asegurarnos de que es quien dice ser, sino que es igualmente importante que esa persona tenga claro que nosotros somos quiénes decimos ser. Un certificado digital asegura eso, pero la mayor parte de los usuarios no se fijan en estas cosas y si un malhechor los lleva a un sitio que suplanta el nuestro y que no usa SSL, el 90% jamás se percatarán. Algunas empresas lo que hacen es permitir a los usuarios la personalización de sus accesos, de modo que una vez que están dentro del sistema se les muestra junto a la aplicación una foto o una frase que ellos mismos han elegido. Un sitio de phishing no puede tener esa información por lo que si no aparece enseguida se dan cuenta de que no están en donde debieran. Este tipo de cuestiones es importante tenerlas en cuenta también al desarrollar.

Podrían ser muchos más, pero estos 5 son quizá los más importantes, así que no los pierdas de vista nunca.

Fecha de publicación:

# data[].attributes.attachment_link.title
5 cuestiones sobre seguridad en programación que siempre deberías tener en cuenta - campusMVP.es

# data[].attributes.attachment_link.description
Cada vez dependemos más del software. Está en todas partes, y no solo dentro de nuestras pantallas. Algunos fallos pueden ser catastróficos, y especialmente todos los que tienen que ver con la seguridad y la privacidad, que van siempre muy relacionadas.

# data[].attributes.headline
Lo que todo programador debería saber sobre seguridad.

# data[].attributes.subject
Lo que todo programador debería saber sobre seguridad.

# data[].attributes.attachment_link.readable_text
0 .- Ir al grano

El deber de un buen programador es reducir el riesgo tecnológico, eso implica ir a la parte más compleja del proyecto primero, en otras ocasiones la más importante (no siempre coinciden).

1 .- Debe conocer varios lenguajes de programación

Un buen programador debe conocer las diferencias de los diversos lenguajes de programación sus puntos fuertes, o sea cuando (y cuando no) se debe ocupar alguno de ellos.

De un buen programador al menos se espera que sea fuerte en algún lenguaje, los generalistas ( unicornios) son siempre bienvenidos pero sólo saber muchas cosas a medias no te hace un buen programador.

2 .- Debe conocer y saber aplicar patrones de diseño.

Un programador no crear todo desde cero, debe estudiar y conocer soluciones tipo para los problemas frecuentes, ningún programador decente que se aprecie de hacerlo puede darse el lujo de no conocer los patrones básicos de diseño de su lenguaje fuerte, un programador de javascript que no sabe lo que es un closure simplemente no conoce javascript.

3 .- Debe realizar control de cambios sobre sus códigos.

Todo buen programador trabaja con algún sistema de control de cambios, ya sea con GIT, SVN u otro, además sabe trabajar de acuerdo a algún branching model que le permite implementar set de cambios con tranquilidad y seguridad de no romper su código ni la versión que está en producción.

4 .- Debe realizar tests automatizados sobre su código.

Antes de implementar un función X, ¿estamos seguros de que no romperemos la función Y? ¿Antes de actualizar la versión de alguna componente, plugin, plataforma, sistema operativo, estamos seguros de que todo seguirá funcionando como antes? Antes de publicar un nuevo set de cambios estamos seguros de que no romperemos algo?

Con tests automatizados es posible saber inmediatamente si un cambio rompió alguna funcionalidad, y, si además es implementado junto al control de cambio es posible saber con exactitud que parte del código y en que commit fue que una determinado cambio rompió o hizo dejar de funcionar alguna funcionalidad.

5 .- Debe respetar las convenciones sobre el lenguaje que trabaja.

Todo lenguaje tiene sus convenciones, como la forma de nombrar variables y la forma de poner paréntesis. Las convenciones no siempre son cosa de estilo, así que es importante respetarlas.

VI 6 .- Debe ser consistente.

Los nombres de las variables deben ser consistentes a lo largo del código, si usamos notación camel case que toda la notación a lo largo del código sea camel case, además hay que respetar las convenciones del lenguaje, y no olvidar que si contamos los índices desde cero, que todos los índices partan desde cero.

7 .- Debe exponer su trabajo y aceptar críticas (mejoras) sobre el.

Si una persona no comparte su trabajo tiene pocas posibilidades de recibir feedback de personas que sepan más que el y por lo mismo tiene pocas posiblidades de mejorar. Uno aprende a través de compartir, Quora y StackOverflow son muy buenas fuentes, seguir en github proyectos de interés también es muy buena fuente de aprendizaje, uno aprende mucho de las correcciones que otras personas te hacen y además aprende revisando el trabajo de otras personas.

8 .- Debe refactorizar y documentar su código.

Primero los problemas se resuelven para un caso, luego para diez y luego para cien. Los programadores primero escriben el código para resolver un problema pero luego lo arreglan para que el código quede ordenado, entendible por humanos y reutilizable para otras ocasiones.

Además es deber del buen programador documentar ya sea con comentarios, diagramas y buenos commits.

9. .- Debe saber que la optimización prematura es la madre de todos los males.

Si un programador pasa cuarenta horas optimizando una parte de su código y por lo mismo deja de hacer cientos de otras cosas pendientes, no es un buen programador, es un obsesivo y aunque todos los programadores somos un poco obsesivos, hacemos un esfuerzo constante por enfocarnos en las cosas que son importantes, como por ejemplo terminar nuestro producto a tiempo.

Este punto a primera vista se contradice con el anterior, pero son cosas bien distintas,

10 .- Debe llevar un blog, o un cuaderno con lo aprendido.

A lo largo de una vida de programador vas a olvidar casi tantas cosas como las que vas a aprender, por lo mismo es necesario que todo buen programador lleve un cuaderno, o mejor aún, un blog, con sus apuntes.

11 .- Debe saber que las personas no leen las instrucciones.

Es la regla de oro de la usabilidad, las personas nunca leen las instrucciones, aunque estén en letra gigante y en un marco rojo, los usuarios usarán y abusarán de tu programa a su antojo. A veces maliciosamente y a veces romperán cosas por ignorancia, pero hagan lo que hagan no leerán las instrucciones. Cuando un programador entiendo esto bien el programa debe ser probado para que haga lo que tiene que hacer y que no haga lo que no tiene que hacer.

12 .- Humildad

Un buen programador sabe que siempre hay algo nuevo que aprender, y por más bueno que sea no lo sabe todo, cualquier persona puede enseñarte algo nuevo, no importa si es más viejo o más joven que tu, por lo mismo todo buen programador debe ser humilde.

13 .- Buscar en google (RTFM)

Todo buen programador sabe buscar información en google, sabe que no toda información es fiable y muchas veces está desactualizada, el buen programador sabe seleccionar la información que necesita, no se limita al copy paste y puede entender como aplicar lo leído a otros contextos.

# data[].attributes.attachment_link.title
¿Qué debe saber un buen programador? - Desafio Latam

# data[].attributes.attachment_link.description
0 .- Ir al grano El deber de un buen programador es reducir el riesgo tecnológico, eso implica ir a la parte más compleja del proyecto primero, en otras ocasiones la más importante (no siempre coinciden). 1 .- Debe conocer varios lenguajes de programación Un buen programador debe conocer las diferencias de los diversos lenguajes de ...

# data[].attributes.attachment_link.readable_text
Para prender a programar necesitar tener muchos conceptos, no importa el lenguaje de programación, te recomiendo:

Algoritmia

Estructuras de datos

Estructuras de control

POO

Arquitectura de software

UML

Patrones de diseño de software.

Esto te servira para Java y otros lenguajes de programación y para que te desenvuelvas o no te pierdas en las etapas del ciclo de vida del desarrollo de un sistema.

# data[].attributes.attachment_link.title
¿Cuáles son los conceptos que todo programador de Java debe saber?

# data[].attributes.attachment_link.description
Respuesta: Para prender a programar necesitar tener muchos conceptos, no importa el lenguaje de programación, te recomiendo: * Algoritmia * Estructuras de datos * Estructuras de control * POO * * clases * objetos * abstracción * herencia * polimorfismo * etc * Arquitectura de softw...

# data[].attributes.headline
Lo que un programador Java debería saber.

# data[].attributes.subject
Lo que un programador Java debería saber.