Soy un buen desarrollador, pero soy un mal diseñador. ¿Cómo desarrollo buenos productos?

101 puntos a tener en cuenta durante el desarrollo del producto

Encuentre trabajo independiente en línea – Engineerbabu

  1. Verifique que todas las páginas y recursos por defecto requieran autenticación, excepto aquellos específicamente destinados a ser públicos (Principio de mediación completa).
  2. Verifique que todos los campos de contraseña no hagan eco de la contraseña del usuario cuando se ingresa
  3. Verifique que todos los controles de autenticación se apliquen en el lado del servidor.
  4. Verifique que todos los controles de autenticación fallen de forma segura para garantizar que los atacantes no puedan iniciar sesión.
  5. Verifique que los campos de ingreso de contraseña permitan o fomenten el uso de frases de contraseña, y no eviten que se ingresen frases de contraseña largas / contraseñas muy complejas.
  6. Verifique que todas las funciones de autenticación de identidad de la cuenta (como el perfil de actualización, la contraseña olvidada, el token deshabilitado / perdido, la mesa de ayuda o el IVR) que puedan recuperar el acceso a la cuenta sean al menos tan resistentes a los ataques como el mecanismo de autenticación principal.
  7. Verifique que la funcionalidad de cambio de contraseña incluya la contraseña anterior, la contraseña nueva y una confirmación de contraseña.
  8. Verifique que todas las decisiones de autenticación sospechosas estén registradas. Esto debe incluir solicitudes con metadatos relevantes necesarios para investigaciones de seguridad.
  9. Verifique que las contraseñas de las cuentas utilicen una rutina de cifrado de fuerza suficiente y que resista el ataque de fuerza bruta contra la rutina de cifrado.
  10. Verifique que las credenciales se transporten utilizando un enlace cifrado adecuado y que todas las páginas / funciones que requieren que un usuario ingrese las credenciales se realizan utilizando un enlace cifrado.
  11. Verifique que la función de contraseña olvidada y otras rutas de recuperación no revelen la contraseña actual y que la nueva contraseña no se envíe en texto claro al usuario
  12. Verifique que la enumeración de la información no sea posible mediante el inicio de sesión, el restablecimiento de contraseña o la funcionalidad de cuenta olvidada.
  13. Verifique que no haya contraseñas predeterminadas en uso para el marco de la aplicación o cualquier componente utilizado por la aplicación (como “admin / contraseña”).
  14. Verifique que la limitación de solicitudes esté en su lugar para evitar ataques automáticos contra ataques de autenticación comunes, como ataques de fuerza bruta o ataques de denegación de servicio.
  15. Verifique que todas las credenciales de autenticación para acceder a servicios externos a la aplicación estén encriptadas y almacenadas en una ubicación protegida
  16. Verifique que la contraseña olvidada y otras rutas de recuperación usen un token flexible, inserción móvil o un mecanismo de recuperación fuera de línea.
  17. Verifique que el bloqueo de cuenta esté dividido en estado de bloqueo suave y duro, y estos no son mutuamente excluyentes. Si una cuenta está temporalmente bloqueada debido a un ataque de fuerza bruta, esto no debería restablecer el estado de bloqueo duro.
  18. Verifique que si se requieren preguntas basadas en el conocimiento (también conocidas como “preguntas secretas”), las preguntas deben ser lo suficientemente fuertes como para proteger la aplicación.
  19. Verifique que el sistema se pueda configurar para no permitir el uso de un número configurable de contraseñas anteriores.
  20. Verifique que se requiera la autentificación de nuevo, la autenticación progresiva o adaptativa, la autenticación de dos factores o la firma de transacciones antes de que se permitan operaciones confidenciales específicas de la aplicación según el perfil de riesgo de la aplicación
  21. Verifique que existen medidas para bloquear el uso de contraseñas comúnmente elegidas y frases de contraseña débiles.
  22. Verifique que todos los desafíos de autenticación, ya sean exitosos o fallidos, deben responder en el mismo tiempo de respuesta promedio.
  23. Verifique que los secretos, las claves API y las contraseñas no estén incluidas en el código fuente o en los repositorios de código fuente en línea.
  24. Verifique que si una aplicación permite a los usuarios autenticarse, utilicen un mecanismo de autenticación seguro comprobado.
  25. Verifique que si una aplicación permite que los usuarios se autentiquen, pueden autenticarse utilizando la autenticación de dos factores u otra autenticación fuerte, o cualquier esquema similar que brinde protección contra la divulgación de nombre de usuario + contraseña.
  26. Verifique que las interfaces administrativas no sean accesibles para las partes no confiables
  27. Verifique que las sesiones se invaliden cuando el usuario cierra la sesión.
  28. Verifique que las sesiones agoten el tiempo de espera después de un período específico de inactividad.
  29. Verifique que las sesiones agoten el tiempo de espera después de un período de tiempo máximo configurable administrativamente, independientemente de la actividad (un tiempo de espera absoluto).
  30. Verifique que todas las páginas que requieren autenticación tengan acceso fácil y visible a la funcionalidad de cierre de sesión
  31. Verifique que la identificación de la sesión nunca se divulgue en URL, mensajes de error o registros. Esto incluye verificar que la aplicación no admite la reescritura de URL de las cookies de sesión.
  32. Verifique que toda la autenticación y reautenticación exitosa genere una nueva sesión e ID de sesión.
  33. Verifique que solo los identificadores de sesión generados por el marco de la aplicación sean reconocidos como activos por la aplicación.
  34. Verifique que los identificadores de sesión sean lo suficientemente largos, aleatorios y únicos en la base de sesión activa correcta.
  35. Verifique que la identificación de la sesión almacenada en las cookies tenga su ruta establecida en un valor restrictivo apropiado para la aplicación, y los tokens de sesión de autenticación configuran adicionalmente los atributos “HttpOnly” y “seguro”
  36. Verifique que la aplicación limite el número de sesiones concurrentes activas.
  37. Verifique que se muestre una lista de sesión activa en el perfil de la cuenta o similar de cada usuario. El usuario debe poder finalizar cualquier sesión activa.
  38. Verifique que se le solicite al usuario la opción de finalizar todas las demás sesiones activas después de un proceso exitoso de cambio de contraseña.
  39. Verifique que exista el principio de menor privilegio: el usuario solo debe poder acceder a funciones, archivos de datos, URL, controladores, servicios y otros recursos para los cuales posee una autorización específica. Esto implica protección contra la suplantación de identidad y la elevación de privilegios.
  40. Verifique que el acceso a registros confidenciales esté protegido, de modo que solo los objetos o datos autorizados sean accesibles para cada usuario (por ejemplo, proteja contra los usuarios que alteran un parámetro para ver o alterar la cuenta de otro usuario).
  41. Verifique que la exploración del directorio esté deshabilitada a menos que lo desee deliberadamente. Además, las aplicaciones no deben permitir el descubrimiento o divulgación de metadatos de archivos o directorios, como las carpetas Thumbs.db, DS_Store, .git o .svn.
  42. Verifique que los controles de acceso fallen con seguridad.
  43. Verifique que las mismas reglas de control de acceso implícitas en la capa de presentación se apliquen en el lado del servidor.
  44. Verifique que los usuarios finales no puedan manipular todos los atributos de usuario y datos y la información de política utilizada por los controles de acceso a menos que esté específicamente autorizado.
  45. Verifique que haya un mecanismo centralizado (incluidas las bibliotecas que llaman a servicios de autorización externos) para proteger el acceso a cada tipo de recurso protegido.
  46. Verifique que se puedan registrar todas las decisiones de control de acceso y que se registren todas las decisiones fallidas.
  47. Verifique que la aplicación o el marco de trabajo utilicen tokens aleatorios anti-CSRF fuertes o que tengan otro mecanismo de protección de transacciones.
  48. Verifique que el sistema pueda proteger contra el acceso agregado o continuo de funciones, recursos o datos seguros. Por ejemplo, considere el uso de un regulador de recursos para limitar el número de ediciones por hora o para evitar que un usuario individual elimine toda la base de datos.
  49. Verifique que la aplicación tenga autorización adicional (como la autenticación progresiva o adaptativa) para sistemas de menor valor, y / o la segregación de deberes para aplicaciones de alto valor para hacer cumplir los controles antifraude según el riesgo de aplicación y fraude pasado.
  50. Verifique que la aplicación aplique correctamente la autorización sensible al contexto para no permitir la manipulación no autorizada mediante la manipulación de parámetros.
  51. Verifique que el entorno de tiempo de ejecución no sea susceptible a desbordamientos del búfer o que los controles de seguridad eviten los desbordamientos del búfer.
  52. Verifique que las fallas de validación de entrada del lado del servidor provoquen el rechazo de la solicitud y se registren.
  53. Verifique que las rutinas de validación de entrada se apliquen en el lado del servidor.
  54. Verifique que la aplicación utilice un único control de validación de entrada para cada tipo de datos que se acepte.
  55. Verifique que todas las consultas SQL, HQL, OSQL, NOSQL y los procedimientos almacenados, la llamada de los procedimientos almacenados estén protegidos por el uso de declaraciones preparadas o la parametrización de consultas, y por lo tanto no sean susceptibles a la inyección SQL
  56. Verifique que la aplicación no sea susceptible a la inyección de LDAP o que los controles de seguridad eviten la inyección de LDAP.
  57. Verifique que la aplicación no sea susceptible a la inyección de comandos del sistema operativo o que los controles de seguridad eviten la inyección de comandos del sistema operativo.
  58. Verifique que la aplicación no sea susceptible a la inclusión remota de archivos (RFI) o la inclusión local de archivos (LFI) cuando se utiliza contenido que es una ruta a un archivo.
  59. Verifique que la aplicación no sea susceptible a ataques XML comunes, como la manipulación de consultas XPath, ataques de entidad externa XML y ataques de inyección XML.
  60. Si el marco de la aplicación permite la asignación automática de parámetros en masa (también denominada enlace variable automático) desde la solicitud entrante a un modelo, verifique que los campos sensibles a la seguridad como “saldo de cuenta”, “rol” o “contraseña” estén protegidos contra el enlace automático malicioso
  61. Verifique que la aplicación tenga defensas contra ataques de contaminación de parámetros HTTP, particularmente si el marco de la aplicación no hace distinción sobre el origen de los parámetros de solicitud (GET, POST, cookies, encabezados, entorno, etc.)
  62. Verifique que la validación del lado del cliente se use como una segunda línea de defensa, además de la validación del lado del servidor.
  63. Verifique que todos los datos de entrada estén validados, no solo los campos de formulario HTML, sino todas las fuentes de entrada, como llamadas REST, parámetros de consulta, encabezados HTTP, cookies, archivos por lotes, fuentes RSS, etc. usando validación positiva (lista blanca), luego formas de validación menores, tales como listas grises (eliminando cadenas malas conocidas) o rechazando entradas malas (listas negras).
  64. Verifique que los datos transferidos de un contexto DOM a otro utilicen métodos seguros de JavaScript, como el uso de .innerText y .val.
  65. Al analizar JSON en los navegadores, verifique que JSON.parse se usa para analizar JSON en el cliente. No use eval () para analizar JSON en el cliente.
  66. Verifique que los datos autenticados se borren del almacenamiento del cliente, como el DOM del navegador después de que finalice la sesión.
  67. Verifique que todos los módulos criptográficos fallen de manera segura y que los errores se manejen de una manera que no permita el relleno de Oracle.
  68. Verifique que los módulos criptográficos operen en su modo aprobado de acuerdo con sus políticas de seguridad publicadas.
  69. Verifique que, cuando sea posible, las claves y los secretos se pongan a cero cuando se destruyan.
  70. Verifique que todas las claves y contraseñas sean reemplazables y que se generen o reemplacen en el momento de la instalación.
  71. Verifique que la aplicación no muestre mensajes de error o traza los rastros que contienen datos confidenciales que podrían ayudar a un atacante, incluida la identificación de sesión, las versiones de software / framework e información personal
  72. Verifique que la lógica de manejo de errores en los controles de seguridad niegue el acceso por defecto.
  73. Los controles de registro de seguridad de verificación proporcionan la capacidad de registrar el éxito y, en particular, los eventos de falla que se identifican como relevantes para la seguridad.
  74. Verifique que cada evento de registro incluya información necesaria que permita una investigación detallada de la línea de tiempo cuando ocurre un evento.
  75. Verifique que la aplicación no registre datos confidenciales según lo definido en las leyes o regulaciones de privacidad locales, datos confidenciales de la organización según lo definido por una evaluación de riesgos o datos confidenciales de autenticación que podrían ayudar a un atacante, incluidos identificadores de sesión de usuario, contraseñas, hash o tokens API .
  76. Verifique que todos los símbolos no imprimibles y los separadores de campo estén codificados correctamente en las entradas del registro, para evitar la inyección del registro.
  77. Verifique que los campos de registro de fuentes confiables y no confiables se puedan distinguir en las entradas de registro.
  78. Verifique que los registros de seguridad tengan alguna forma de comprobación o control de integridad para evitar modificaciones no autorizadas.
  79. Verifique que los registros estén almacenados en una partición diferente a la que se ejecuta la aplicación con la rotación de registro adecuada.
  80. Verifique que todos los formularios que contienen información confidencial hayan deshabilitado el almacenamiento en caché del lado del cliente, incluidas las funciones de autocompletar.
  81. Verifique que se identifique la lista de datos confidenciales procesados ​​por la aplicación y que exista una política explícita sobre cómo se debe controlar, cifrar y aplicar el acceso a estos datos según las directivas de protección de datos relevantes.
  82. Verifique que todos los datos confidenciales se envíen al servidor en el cuerpo o encabezados del mensaje HTTP (es decir, los parámetros de URL nunca se usan para enviar datos confidenciales).
  83. Verifique que haya un método para eliminar cada tipo de datos confidenciales de la aplicación al final de la política de retención requerida.
  84. Verifique que la aplicación minimice el número de parámetros en una solicitud, como campos ocultos, variables Ajax, cookies y valores de encabezado.
  85. Verifique que la aplicación tenga la capacidad de detectar y alertar sobre números anormales de solicitudes de recolección de datos para un ejemplo de captura de pantalla.
  86. Verifique que los datos almacenados en el almacenamiento del lado del cliente, como el almacenamiento local HTML5, el almacenamiento de sesión, IndexedDB, las cookies normales o las cookies Flash, no contengan información confidencial o PII).
  87. Verifique que se registre el acceso a datos confidenciales, si los datos se recopilan según las directivas de protección de datos relevantes o si se requiere el registro de accesos.
  88. Verifique que los datos confidenciales se desinfecten rápidamente de la memoria tan pronto como ya no se necesiten y se manejen de acuerdo con las funciones y técnicas admitidas por el marco / biblioteca / sistema operativo.
  89. Verifique que las rutas de los certificados estén compiladas y verificadas para todos los certificados del cliente utilizando anclajes de confianza configurados e información de revocación.
  90. Verifique que la URL del sitio web de producción se haya enviado a una lista precargada de dominios de seguridad de transporte estricta mantenida por los proveedores de navegadores web. Por favor, consulte las referencias a continuación.
  91. Verifique que solo se usen algoritmos, cifrados y protocolos sólidos, a través de toda la jerarquía de certificados, incluidos los certificados raíz e intermedios de la autoridad de certificación seleccionada.
  92. Verifique que la aplicación acepte solo un conjunto definido de métodos de solicitud HTTP requeridos, como GET y POST, y que los métodos no utilizados (por ejemplo, TRACE, PUT y DELETE) estén explícitamente bloqueados.
  93. Verifique que los encabezados HTTP o cualquier parte de la respuesta HTTP no expongan información de versión detallada de los componentes del sistema.
  94. Verifique que toda actividad maliciosa esté adecuadamente protegida, en contenedores o aislada para retrasar y disuadir a los atacantes de atacar otras aplicaciones.
  95. Verifique que una revisión de código busque código malicioso, puertas traseras, huevos de Pascua y fallas lógicas.
  96. Verifique que la aplicación solo procese flujos de lógica de negocios en orden de pasos secuenciales, con todos los pasos procesados ​​en tiempo humano realista, y no procese fuera de orden, pasos omitidos, pasos de proceso de otro usuario o transacciones enviadas demasiado rápido.
  97. Verifique que la aplicación tenga límites comerciales y se aplique correctamente por usuario, con alertas configurables y reacciones automáticas a ataques automáticos o inusuales.
  98. Verifique que los redireccionamientos y reenvíos de URL solo permitan destinos en la lista blanca o muestre una advertencia cuando redirija a contenido potencialmente no confiable.
  99. Verifique que el código de la aplicación no ejecute datos cargados obtenidos de fuentes no confiables.
  100. No utilice Flash, Active-X, Silverlight, NACL, Java del lado del cliente u otras tecnologías del lado del cliente que no sean compatibles de forma nativa a través de los estándares del navegador W3C.
  101. Verifique que los datos no confiables no se usen en las capacidades de inclusión, cargador de clases o reflexión para evitar vulnerabilidades de inclusión de archivos remotos / locales.

Detrás de excelentes productos siempre hay un gran equipo . Un gran líder conoce las competencias centrales del equipo y se asegura de que sean fuertes en todo momento. Realmente se trata de conocer sus fortalezas y debilidades y compensar las debilidades adquiriendo el talento adecuado. Esta es precisamente la razón por la cual las empresas crecen en tamaño a medida que se contratan diferentes especialistas para maximizar el potencial del producto final (¡ en teoría, de todos modos! ).

Un ejemplo clásico es el de Steve Jobs. Tenía una visión increíble y sabía lo que quería que hicieran estos productos. Sin embargo, tenía poco o ningún talento de ingeniería / desarrollo y sus habilidades de diseño también eran relativamente inferiores.

Su solución? Rodeándose de personas que podrían complementarlo mejor. Reclutó al mejor talento de ingeniería que pudo encontrar para asegurarse de que los productos fueran diseñados de manera suprema. Se dio cuenta de que el diseño era fundamental para su visión, por lo que trajo a un conjunto de diseñadores revolucionarios (por ejemplo, Jonathan Ive).

Al final, vimos lo que logró. Todo era una comprensión de dónde quería ir, y las conexiones que necesitaba hacer para llegar allí.

Desarrolle productos que no requieran diseño. Me vienen a la mente complementos de ingeniería o adquisición de datos o mejoras en la eficiencia del código.

Escuche al Usuario e ignore a los demás que dijeron buscar pareja. Resista el impulso de asociarse con alguien a menos que realmente confíe en ellos. Incluso entonces, resista el impulso de asociarse con alguien. La mayoría de los chicos divorciados confiaban en su ex esposa.

La observación es la respuesta clave. Siga la guía del diseñador experimentado, cometa errores, cree su primer diseño, observe cómo reacciona el usuario final al diseño y mejore su diseño en consecuencia.

pero el enfoque principal debe ser observar, aprender y moverse paso a paso

Pase tiempo en dribbble (15min / día). Busque etiquetas como UI, UX, página de destino, etc. Aprenderá “diseño” rápidamente. Dado que el diseño pasó del esceptomorfismo al plano, ya no necesita muchas habilidades de Photoshop, incluso puede diseñar directamente en HTML / CSS.

Asóciese o contrate diseñadores con buenas carteras. Hacer una cosa y una cosa bien es lo mejor.

Asociarse con un buen diseñador.

More Interesting

Actualmente, soy estudiante de ingeniería. Estaba ejecutando una startup y era el CEO. Ahora, debido a la política interna, me han destituido como CEO. Di mucho, pero no me siento parte de eso ahora. ¿Qué tengo que hacer? ¿Soy un completo fracaso?

¿Hay un inicio bajo demanda para todo?

¿Qué se necesita para convertirse en ingeniero? Soy inteligente y muy bueno para reunir mucha información y conectar los puntos. Las matemáticas me resultan fáciles y soy muy bueno planeando algo

¿Es una mala idea lanzar una aplicación gratuita con la esperanza de descubrir y agregar características que las empresas están listas para pagar una vez que se enganchan?

¿Dónde puedo encontrar recomendaciones para un agente registrado de Delaware?

¿Cuáles son algunos buenos ejemplos de plan de negocios de comida rápida?

¿Qué debe ser mejor para iniciar o hacer más estudios para el inicio o el trabajo?

¿A quién puedo contratar para que me ayude a calcular los costos de una startup tecnológica?

¿Existe alguna plataforma de desarrollo móvil no nativa dentro de la cual se pueda desarrollar una aplicación que brinde una experiencia de usuario que sea indistinguible de la de una aplicación nativa?

¿Cuáles son los pros y los contras de unirse a una startup en etapa temprana (Serie A) versus una empresa pública más grande?

Soy parte de tres startups, en música, moda y tecnología. ¿Cómo puedo trabajar de manera más eficiente?

Quiero intentar hacer un sitio web propio, y soy totalmente nuevo en esto. ¿Como empiezo? ¿Qué necesito hacer en esta etapa inicial?

¿Qué lecciones de negocios se pueden extraer de la Serie Mundial 2013?

¿Cuál es la compensación típica para un blogger contratado para escribir para el blog de una startup?

¿Los aceleradores de inicio insisten en que debería tener un solo proyecto?