¿Qué conocimiento tienen los desarrolladores web de pila completa sobre ciberseguridad, cifrado, algoritmos, etc., o son temas separados?

Gracias por el A2A. Hay una multitud de respuestas, con un contenido aparentemente contradictorio. Algunos dicen que un desarrollador de pila completa debería saber algo de esto bien, algunos dicen que no tienden a saberlo en absoluto. Creo que lo que falta en la mayoría de estas respuestas es lo que realmente es un desarrollador de pila completa. Un desarrollador de pila completa es alguien que tiene al menos una comprensión básica del front-end, back-end, base de datos, infraestructura y gestión de proyectos, y una gran comprensión de al menos uno de esos componentes. Cuanto más avanzado seas, más debes saber, lo que suena bastante obvio.

Ahora que tenemos eso fuera del camino, si alguien tiene una excelente comprensión de uno de los componentes anteriores, eso significa que tiene una excelente comprensión de la seguridad, el cifrado y los algoritmos para ese componente en particular. Eso significa que los temas que enumeró anteriormente están integralmente vinculados a los componentes del ecosistema que el desarrollador conoce mejor. Si me dice que es un desarrollador full-stack con un enfoque en el back-end, espero que comprenda la notación de BigO y la complejidad operativa, espero que sepa cómo ordenar y buscar datos en la memoria , Espero que pueda proteger sus puntos finales para protegerlos de CSRF, limpiar los datos para protegerlos de la inyección y comprender cómo su aplicación encaja en la infraestructura para proteger contra ataques de tipo CGI.

Lo mismo se aplica para todas las otras partes de la pila, aunque tradicionalmente se ha puesto menos énfasis en el front-end.

Un desarrollador web de pila completa debería (¡pero no todos lo saben!) Saber cómo proteger la aplicación web contra intrusiones. Pero, de la misma manera que la calidad del software requiere personas separadas que realizan las pruebas, la seguridad requiere personas separadas para la prueba de penetración y auditoría, o en términos populares, para “piratear”.

El desarrollador web de pila completa también debe saber cómo elegir y usar bibliotecas para algoritmos de cifrado en el código cuando corresponda, pero también debe saber que no debe intentar escribir su propio código, ya que es un área especializada de ingeniería de software. Incluso cuando usan bibliotecas, una persona separada debe probar su uso apropiado.

La razón de esto es que el desarrollo de aplicaciones y la creación de características se opone a asegurarlas y reducir la funcionalidad. Una gran explicación: la respuesta de Terry Lambert a ¿Cuál es el trabajo más estresante, el analista de seguridad de la información o el ingeniero de software, y por qué?

Ver también: ¿Hay otros programadores que no tengan idea acerca de la piratería?

Personalmente, conozco suficiente seguridad de la información y seguridad de aplicaciones web para diseñar aplicaciones, pero antes de pasar a la producción en entornos de TI empresarial, mi trabajo necesita ser revisado por una organización separada: un departamento diferente con diferentes líneas de informes, o incluso una compañía separada. Conozco la criptografía como usuario, pero no las matemáticas.

No pasé mis “10,000 horas para dominar” en seguridad, así que confío en los que sí lo hicieron.

A2A

Si bien los desarrolladores de pila completa deberían saber sobre la seguridad cibernética, me arriesgaría a que la mayoría de ellos no. Es por eso que las empresas tienen divisiones de InfoSec.

Por supuesto, esas divisiones se ocupan principalmente de la seguridad contra ataques de la compañía, no de garantizar que el software producido por la compañía sea seguro. Para eso están las pruebas funcionales y de control de calidad.

Entonces, si bien sería bueno que los desarrolladores conocieran la seguridad, probablemente solo conozcan el mínimo y no cómo implementarlo completamente en su código. Algunos serán mejores que otros, pero todo mi conocimiento de InfoSec se obtuvo al obtener la certificación Security +, así como varios otros certificados de seguridad. No recibí ningún entrenamiento en la escuela ni tengo ningún libro de programación que haya leído sobre eso.

Muchos desarrolladores de stack completo saben lo mínimo para que una aplicación funcione. Pero algunos conocen la seguridad, el diseño algorítmico avanzado y cómo escalar su sitio cuando sea necesario.

Y realmente desea tener al menos un arquitecto en su proyecto que sepa todo esto. No es suficiente contratar al mejor postor y hacer que alguien más venga más tarde para tratar de “agregar seguridad y algoritmos”, porque realmente ambos deben integrarse en el diseño subyacente del sitio.

Algunas decisiones tempranas pueden afectar enormemente el rendimiento y los costos del servidor. Es un mantra favorito de la comunidad Ruby que “los servidores son baratos; los programadores son caros “, por ejemplo, pero cuando necesita pagar 100 veces los servidores y sus sitios aún no funcionan bien, eso rápidamente termina costando más para siempre: desarrolladores / administradores adicionales para trabajar en el escalado, costos de servidor que pueden fácilmente terminan en el rango de $ 10k- $ 100k / mes, y la complejidad del desarrollo que aumenta el costo de agregar nuevas funciones. Sin mencionar evitar la vergüenza y el daño a la marca de filtrar la información de sus clientes a través de un hack.

A veces, tener un desarrollador / arquitecto realmente bueno puede valer su salario, que de otro modo sería más alto. Y créame, cuando encuentre a alguien tan bueno, es probable que cueste mucho más por hora que los otros desarrolladores que está considerando. Por lo general, cobro $ 150–250 / hora, por ejemplo, pero hago el trabajo rápidamente, y al final es seguro, robusto y fácil de ampliar con nuevas características. En muchos casos, mi trabajo cuesta menos que los desarrolladores que cobran menos por hora, de hecho. Quienquiera que contrate, verifique sus referencias y escuche frases como “fácil de trabajar”, “hace las cosas rápidamente” o “arregla mi aplicación cuando otro desarrollador la abandona”.

Buena suerte.

Muchos desarrolladores web full stack prácticamente no tienen conocimiento de estos temas. Muchos no son conscientes de cosas básicas como la inyección de SQL, el hash de contraseñas, etc. Muchos sitios web, incluso algunos bastante populares, son absolutamente horrendos desde el punto de vista de la seguridad. Los desarrolladores a menudo son absolutamente ajenos a la seguridad. Solo les importa tener su sitio web en línea. Esa es solo la realidad; Desearía que fuera diferente, pero en muchos casos, no lo es.

Por supuesto, deben saber sobre estas cosas, al menos sobre seguridad. Deben saber que las contraseñas deben ser hash. No tienen que conocer todos los detalles del proceso real, pero deben saber que debe hacerse y deben saber cómo usar las bibliotecas para lograr esto.

Si contrata a alguien por separado depende de la escala del proyecto. Para un proyecto pequeño que es poco probable que esté sujeto a un ataque sofisticado, un desarrollador web competente de pila completa debería ser capaz de manejarlo por su cuenta. Para proyectos más grandes, o que puedan estar sujetos a un ataque y / o que manejen datos confidenciales, la aplicación debe ser revisada al menos por alguien que sepa mucho sobre seguridad de aplicaciones web y al menos ser probada contra ataques comunes.

Un ingeniero de pila completa debe tener una comprensión básica de la seguridad cibernética, el cifrado y, ciertamente, los algoritmos. Y si por casualidad el ingeniero de ropa suave de pila completa no tiene ningún conocimiento específico en esas áreas, podría tomarse un tiempo y repasar los fundamentos de la ciberseguridad y el cifrado.

Es importante conocer los conceptos básicos de ciberseguridad y cifrado en particular si usted es un ingeniero que alguna vez se ocupó de mantener seguros los datos personales (por ejemplo, en una aplicación web).

Pero una comprensión básica no significa especialista. Si está tratando con datos parcialmente confidenciales, puede considerar contratar a alguien que tenga un amplio conocimiento y experiencia en esa área. La seguridad no es algo con lo que quiera arriesgarse.

Asistí a una escuela en SF, Holberton: y su enfoque de la educación asegura que tengas al menos una comprensión básica de cómo la seguridad cibernética y el cifrado juegan con otras áreas de la pila, y eso puede ayudarte a tomar conciencia de algunos de los principales obstáculos para evitar. Pero de ninguna manera me consideraría un especialista en ninguna de las áreas.

Un desarrollador de pila completa debe saber cómo asegurar el sitio web que está creando. Necesita un probador para probar el sitio web, pero los errores y los agujeros de bucle encontrados por el probador serán corregidos por el desarrollador web. A continuación se presentan algunos puntos que un desarrollador de pila completa debe considerar al desarrollar la aplicación.

Principios a tener en cuenta si desea que sus aplicaciones sean seguras:

  1. ¡Nunca confíes en ninguna entrada!
  2. Valide la entrada de todas las fuentes no confiables: use listas blancas, no listas negras
  3. Planifique la seguridad desde el principio: no es algo a lo que pueda recurrir al final
  4. Hágalo simple: la complejidad aumenta la probabilidad de agujeros de seguridad
  5. Mantenga su superficie de ataque al mínimo
  6. Adherirse al principio del menor privilegio
  7. inyección SQL
  8. No escribas tu propia criptografía. Usar crypto no significa que estés seguro (los atacantes buscarán un enlace más débil)
  9. Menos privilegio: permita que su aplicación tenga solo el acceso que necesita por el tiempo que la necesita.
  10. Mediación completa: no permita que ninguna ruta de código omita la autorización.
  11. Criptografía / Agilidad criptográfica: conozca sus algoritmos y diseñe su aplicación para cambiarlos cuando sea necesario.
  12. Modelado de amenazas: comprender cómo los malvados pueden atacar su software y diseñar contramedidas.

Escribí websiites (pila completa, éramos demasiado estúpidos en ese entonces para saber que una persona debería manejar el lado del servidor y otra debería manejar el lado del cliente), y nunca aprendí la ciberseguridad o el cifrado. Un algoritmo es solo un proceso o conjunto de reglas a seguir en las operaciones de resolución de problemas. Un programa es un algoritmo. Así es la forma de ver si alguien presionó una tecla en el teclado. Cualquier programador que valga la pena pagar sabe cómo desarrollar los algoritmos que necesita, ya que los ha desarrollado durante toda su carrera de programación.

Un desarrollador de pila completa idealmente debería tener parte de este conjunto de habilidades (para que no cometan errores obvios que introduzcan vulnerabilidades en su servicio); Sin embargo, no debe suponer que tienen este conocimiento. E, incluso si tienen algo de este conocimiento, la seguridad no es su enfoque principal. En consecuencia, no son un reemplazo para contratar a un experto en seguridad o para ejecutar pruebas de penetración regulares (para detectar vulnerabilidades que deben corregirse).

Muchos desarrolladores de stack completo, incluido yo, solo conocen los rudimentos de la ciberseguridad (cifrado básico, métodos de autenticación estándar, evitar la inyección de SQL, etc.).

Pero con el interés de no poner el carro delante del caballo , esas habilidades básicas de seguridad deberían llevarlo a un punto en el que pueda probar el modelo de negocio de su aplicación para determinar si vale la pena seguirlo.

Si tiene un algoritmo patentado que necesita implementar, la mayoría de los desarrolladores podrán hacerlo por usted.

Si la seguridad cibernética es una preocupación primordial, te aconsejaría contratar a un experto, pero solo después de que hayas demostrado que tienes algo que vale la pena asegurar … si eso tiene sentido.

Su desarrollador de pila completa probablemente no sabrá demasiado sobre las cosas que mencionó, pero lo importante es que no lo necesitará a menos que se vuelva grande. Ningún cuerpo está interesado en piratear un advenedizo. Una vez que te conviertes, te conviertes en un objetivo. Entonces puedes pensar en esto.