El manejo adecuado de la sesión y el control de acceso a nivel de función es un punto muy importante en la seguridad web ( Consulte Gestión de sesiones de OWASP y Control de acceso a nivel de función ).
Asegúrese siempre de que los tokens de sesión solo sean válidos para acciones que un determinado usuario puede realizar. Y solo para ese usuario determinado.
Ese es un problema muy grande, y el 99% de todos los sitios web que he probado hasta ahora son vulnerables a los ataques que se desarrollan alrededor de eso. P.ej. cuando los tokens podrían usarse para realizar acciones, el usuario que ha iniciado sesión en ese momento no debería poder hacerlo. Me gusta: reemplazar una identificación en una solicitud con la identificación de otro usuario (o registro). ¡Se sorprendería de la frecuencia con la que este método extremadamente simple funciona para obtener la PII de otros usuarios!
- Todas las direcciones URL solo son accesibles para usuarios con ciertos privilegios.
- Los usuarios no deberían poder simplemente agregar campos a una solicitud. Buen ejemplo: ya vi múltiples sitios web / aplicaciones, donde era posible secuestrar otras cuentas de usuario simplemente agregando un campo de 'correo electrónico' en el formulario donde cada usuario podría cambiar su propia información de perfil.
- Asegúrese de que su forma de otorgar roles a los usuarios / administradores sea segura y que los usuarios no puedan otorgarse privilegios / roles adicionales.
- Los formularios de restablecimiento de contraseñas también suelen ser un buen punto de entrada para los atacantes, y solo para enviar spam a otros usuarios.
Las sesiones deben destruirse al cerrar la sesión / cambiar la contraseña, y no deben reutilizarse en ningún momento.
Además de eso, también debe preocuparse por la divulgación de información (cuando un atacante aplica errores, por ejemplo, con solicitudes o métodos HTTP no válidos, como OPTION en lugar de OPTIONS).
Y, por supuesto, siempre asegúrese de que su sitio web utilice solo las bibliotecas más actualizadas (javascript, módulos de servidor, etc.).
Nunca divulgue información confidencial, por ejemplo, asegúrese de que los tokens de sesión nunca se transmitan a través de solicitudes GET.
También asegúrate de que tu servidor solo permita ciertos métodos HTTP (por ejemplo, no permitas "TRACE").
Validación de entrada: asegura todos los formularios de carga de archivos, son muy vulnerables. P.ej. carga útil en el nombre de archivo. También he visto a menudo que el tamaño máximo de archivo solo se validó en el lado del cliente.
Use captchas cuando sea necesario, y asegúrese de que no puedan ser evitados debido a una mala implementación.
Por último, pero no menos importante, también debería preocuparse por las redirecciones abiertas.
En realidad hay muchas cosas por las que debería preocuparse. Inyección, por ejemplo: no solo hay inyección SQL, sino que la inyección de Javascript también es un alto riesgo para la seguridad de su aplicación. Ocurre con más frecuencia que la inyección SQL, con diferencia.
Podría continuar con esta lista por un tiempo, pero te sugiero que sigas leyendo algunas listas de verificación como esta: enlace