Estructuras de datos. Dices que has aprendido sobre MySQL, pero hay más que solo conocer SQL. Necesita saber cómo diseñar el esquema de su base de datos para mapear bien con sus procesos y objetos.
Seguridad. Seguridad Seguridad Seguridad. Conozca los problemas de seguridad comunes con la web y asegúrese de trabajar para mitigarlos:
- inyección SQL
- Cross Site Scripting
- Click Jacking
- Gestión de contraseñas
Estas son las claves. Para sortearlos, debe hacer lo siguiente, en orden:
- ¿Cómo clono www.tailorstore.com en Django? Me gustaría saber cómo este sitio superpone los patrones de diseño sobre la misma imagen de tela, algo así como TeeSpring. ¿Qué bibliotecas usan?
- ¿Un fondo negro del sitio web ahorra energía en comparación con uno blanco?
- Si varias instancias de una aplicación Heroku están accediendo a una base de datos (usando SQLAlchemy), ¿cómo se evitan las colisiones e inconsistencias?
- ¿Puedes explicar los servicios en AngularJS?
- ¿WordPress es sensible o sus temas lo hacen sensible?
- Desinfectar las entradas en el lado del servidor La validación de datos JavaScript y HTML5 es para ayudar al usuario a ingresar la información correcta. Sin embargo, los formularios en su página web son solo una fachada. Los usuarios malintencionados pueden omitir completamente el formulario y publicarlo en el servidor. La validación DEBE ocurrir en el lado del servidor. Pero aún más importante: parametrice sus consultas. Las bases de datos le permiten crear una consulta que dice: Estos valores se completarán más tarde … los valores que complete serán peligrosos, solo tómelos como datos. La inyección SQL funciona al dividir las cadenas de consulta que crea por su cuenta. La parametrización hace que el servidor SQL no interprete los valores como una cadena larga. No importa cuánto piense que ha limpiado sus datos, la parametrización de sus consultas protegerá sus datos y código de la inyección
- Nuevamente: desinfecte sus datos en el lado del servidor. A continuación, obtenga información sobre la Política de seguridad de contenido. Esto es relativamente nuevo y no todos los navegadores lo implementan todavía, pero es un tema muy importante. Las secuencias de comandos de sitios cruzados permitirán a un usuario inyectar JavaScript en su sitio para que cuando otros usuarios accedan al sitio, se les puede pedir que descarguen paquetes completos de JavaScript que le permitan al usuario malicioso ejecutar JavaScript arbitrario en las computadoras de otros usuarios. La desinfección de sus entradas para las etiquetas de script arreglará la mayor parte y la entrada de usuario de codificación HTML “” también puede arreglar algunas de ellas (haciendo que <aparezca como "& lt;"). Pero usar encabezados que restrinjan qué JavaScript se puede ejecutar es una solución ideal.
- El secuestro de clics es cuando un usuario malintencionado presenta un sitio web a un cliente que usa parte de su sitio web y engaña al usuario para que realice una acción. Por ejemplo, si un cliente inicia sesión en su sitio web, el usuario malintencionado le envía una página web con un iFrame con formato especial que le indica que haga clic en un botón que hace que su sitio web envíe $ 1000 del dinero de su cliente al usuario malicioso. Esto se soluciona mejor con el uso de encabezados del mismo origen para asegurarse de que solo las páginas de su propio sitio o los sitios que haya autorizado puedan usar esa página en un iFrame. Esto también es un problema con REST, debe asegurarse de que las solicitudes provienen de los lugares correctos o un usuario malintencionado podría enviar la publicación correcta a su sitio sin siquiera cargar su sitio.
- Este es un poco más duro. Asegúrese de almacenar sus contraseñas con sal y hash utilizando un algoritmo de hash lento adecuado como bcrypt (no SHA1). Esto hace que sea difícil descifrar las contraseñas si se roban sus datos (planifique lo peor, no asuma que algo no sucederá, le sucederá a empresas y organizaciones más grandes, no asuma que porque es más pequeño no lo hará) pasarte a ti). También recomendaría cifrar las bases de datos para que sea mucho más difícil obtener su información. A continuación, hay políticas de contraseña. Hazlos restrictivos, pero no tan malos como para que el usuario tenga que escribirlos. En general, sus contraseñas deben tener más de 8 caracteres, con un máximo de 255. Deben tener mayúsculas, minúsculas, símbolos y números. En función de su solicitud, debe considerar si debe tener una antigüedad máxima de contraseña. Si lo hace, también debe mantener un diccionario de contraseñas pasadas para que no puedan reutilizarlas dentro de un cierto umbral (10 tal vez), y una edad mínima de contraseña de al menos un día para que no puedan cambiar una contraseña repetidamente a limpiar su historia Considere también los procedimientos de bloqueo, ¿debería el usuario poder desbloquear su cuenta por su cuenta? ¿Cómo? ¿Debería desbloquearse automáticamente después de un tiempo? También recomendaría al menos 10 intentos por bloqueo. 3 Me parece irracionalmente pequeño.
Incluso mejor que todo lo que permite al usuario usar otra tienda de autenticación, como un LDAP o Google, Facebook, Twitter, etc.
Además de la seguridad general básica, asegúrese de implementarlo dentro de su código. No permita que los usuarios realicen tareas administrativas. Datos de recorte de seguridad antes de que lleguen al cliente, etc.
Como desarrollador, debe comprender cómo implementar el código. Probablemente no sea usted quien realice el despliegue de producción, pero necesita saber cómo se hace y poder explicárselo a un niño. Lo pasará a los administradores de sistemas y puede o no interactuar con ellos, por lo que desea que se detalle al pie de la letra. Ser capaz de analizar todos los casos marginales de cosas que salen mal y estar preparado para solucionar fallas.
La documentación es esencial. Estoy seguro de que ha encontrado una documentación pobre de SDK o API como desarrollador. No seas ese chico. Escriba con gran detalle cómo usar su software, qué hace cada script, objeto, función y variable. Anote las condiciones previas, las condiciones de publicación, los valores de retorno, los parámetros esperados y los errores que podría arrojar su código y por qué. Dar ejemplos.
Saliendo un poco del lado técnico puro:
Análisis de requerimientos. Ser capaz de reunir requisitos. Poder entrevistar a las partes interesadas para averiguar qué necesitan. Destile los requisitos propuestos a los requisitos discretos reales (las personas son extrañas, si aún no se ha encontrado con esto, … las personas pedirán cosas que realmente no necesitan o que son imposibles de proporcionar razonablemente).
Estimación de tiempo. Esta es una de las cosas más difíciles de aprender a hacer. Calcule cuánto tiempo le llevará realizar la tarea según los requisitos y su experiencia. Esto es un poco un arte, desea proporcionar algo de tiempo extra en su estimación en caso de que tenga problemas, pero no desea dar demasiado tiempo extra o no podrá facturar ese tiempo y estarás inactivo
Comprender los procesos de negocio; Esto se aplica tanto a los procesos de desarrollo como al usuario final / cliente. Para proporcionar valor, debe comprender cómo todos ganan dinero y encontrar formas de optimizar ese proceso. Muchas veces los clientes no saben lo que quieren que hagas. Debe aprender lo que hacen y descubrir cómo y dónde puede optimizarlo.
Sin embargo, no puedo enfatizar lo suficiente la seguridad. Muchos desarrolladores no lo saben o lo ignoran.