Las amenazas más importantes son las que intentan acceder al backend, como la base de datos. La inyección de SQL está en la parte superior de la lista; la comprobación que debe hacer es asegurarse de que la entrada del usuario no se alimenta directamente en la cadena para una consulta dinámica; la entrada del usuario es cualquier cosa que viene del cliente; incluso si el usuario no puede editarlo en el formulario o en el navegador, imagine que puede interceptar el tráfico que sale de su navegador e inyectar cualquier cosa en cualquier campo. Por lo tanto, siempre tenga en cuenta: "no confíe en la información proveniente del cliente".
Entonces, al no confiar en la entrada del usuario, ahora tiene que validar cada entrada; para la inyección de SQL, debe eliminar cualquier carácter que no sea aceptado; por ejemplo, si se supone que el usuario busca un número, no acepte nada, excepto una combinación de 0-9 a una cierta longitud; eliminar el resto y luego introducirlo en la consulta. Es una buena idea evitar por completo las consultas dinámicas y utilizar consultas parametrizadas y procedimientos almacenados en la base de datos.
El siguiente ataque superior son las inyecciones que pueden dirigirse a otros usuarios; como XSS. La historia con XSS es similar a la inyección SQL, no debe confiar en las entradas del usuario y hacer una validación de la lista blanca al recibir cualquier entrada. En general, el lado del cliente verifica para asegurarse de que el formato en el que el usuario escribió los datos no es suficiente, y todo debe volver a comprobarse en el lado del servidor.
Tienes que prestar especial atención a la parte de autenticación; La entrada de nombre de usuario y contraseña parece una funcionalidad fácil; No lo es. Debe asegurarse de que, al iniciar sesión correctamente, se genere un nuevo valor de sesión y se establezca en la cookie del cliente. También debe asegurarse de que, durante el resto del tiempo que el usuario haya iniciado sesión, esta sesión no esté expuesta a través de HTTP; es decir, tienes que revisar SSL. La sesión debe ser aleatoria, lo suficientemente larga y no adivinable. La mayoría de los lenguajes de programación pueden encargarse de eso; no reinventes la rueda. Asegúrate de que la sesión tenga los indicadores Secure y HTTPOnly establecidos; y asegúrese de que caduque después de un tiempo de inactividad o cierre de sesión manual. El restablecimiento y cambio de contraseña también son funcionalidades muy sensibles; que necesita un largo post para discutir.
Una parte muy importante es la autorización. Una vez que se autentica a un usuario, no significa que haya terminado; cada usuario solo debe acceder a ciertas páginas o datos; por lo tanto, cada solicitud debe verificarse en el lado del servidor para evitar la escalada de privilegios.