PHP (lenguaje de programación): ¿Qué habilidades técnicas (o conocimientos) a menudo se pasan por alto que todo desarrollador de PHP debería tener?

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:

  • 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.

Operaciones Esta es la administración, configuración, soporte, resolución de problemas, implementación, construcción y monitoreo del sistema.

Documentación. ¿Qué necesitará saber la gente para que este producto funcione? ¿Cuáles son los errores que ha visto que pueden tener soluciones poco intuitivas?

Gestión de proyectos. Mantener realistas las expectativas de los interesados, informados sobre el progreso, grandes problemas encontrados. Mantener y mantener listas de verificación y desgloses de las tareas que tiene para que pueda priorizar y comunicarse de manera efectiva.

Capacidad para escribir código demostrable con pruebas significativas automatizadas que se utilizan constantemente para validar su progreso.

Yo diría que comprender el entorno del servidor es cada vez menos importante con la multitud de proveedores de Plataforma como Servicio en el espacio PHP actual. Si desea tener una ventaja en seguridad, los diez mejores de OWASP son un excelente lugar para comenzar. Una cosa que falta en muchos de nosotros los desarrolladores es una comprensión real de HTTP. Para un desarrollador junior, siempre es una buena idea comenzar con una buena teoría de objetos y pruebas unitarias. Estos son los elementos que se esperan para un desarrollador senior y le darán una ventaja sobre sus pares junior.

Haciendo su propio algoritmo de cifrado:

Si lo desea, puede / debe diseñar sus propios algoritmos de cifrado y no debe confiar en los desarrollados previamente como md5 o sha2. Los hackers de nivel experto pueden descifrar esto como un juego de niños.

No se pegue con núcleo:

Atrás quedaron los días en que las personas escribían miles de líneas de código solo para poner en funcionamiento un módulo. Por qué ? Porque los marcos les facilitaron la tarea. Aprendelos. Usalos, usalos a ellos. El php principal sería peligroso cuando aumenta la complejidad de su proyecto.

Siéntete orgulloso y no te preocupes por las personas que critican php:

Los artículos bajo los títulos como ‘ nodejs está matando a php’, ‘python ruined php’ te darán dolor de cabeza si eres un principiante. No te preocupes, php puede hacer casi todo, solo necesitas investigar más. Eso es.