He oído que un servicio que estoy usando en la web tiene algunos problemas con los ataques de denegación de servicio. Me preguntaba si teóricamente es posible construir un servicio web donde el usuario pueda enviar datos y cuál es inmune a las DOS.
DoS es exactamente lo que significa "el usuario puede enviar datos"; ¿Cómo se sabe entre un usuario legítimo y alguien / algo que emula a un usuario legítimo solo para causar problemas? A menudo no puedes.
Para los ataques de agotamiento de ancho de banda, la mitigación es simple, necesita tener más ancho de banda que el atacante; ya sea haciéndolo usted mismo o confiando en un proveedor que se encuentra entre Internet y sus servidores y tiene más ancho de banda que el que la mayoría (¿todos?) atacantes pueden tener. Cloudflare es un ejemplo.
Para ataques de nivel de aplicación, los que intentan bloquear / ralentizar su servidor mediante la sobrecarga son más difíciles de mitigar; si se trata de una aplicación web, podría usar el almacenamiento en caché para evitar procesar la página en cada solicitud y, en cambio, devolver una versión en caché; También podría limitar la cantidad de solicitudes por segundo a lo que es razonable para el uso normal de su servicio. Otra idea es poner las páginas con un uso intensivo de recursos detrás de la autenticación para que solo sus clientes legítimos puedan acceder a ellos, pero los atacantes externos solo obtendrían un 403 sin. causando que el servidor procese lo que se suponía que debía mostrar esa página, por supuesto, la solución tampoco es perfecta, ya que un usuario legítimo puede tener su cuenta comprometida para realizar el ataque, o que hizo que ese usuario "legítimo" esté triste y ahora enojado contigo y quiere venganza (he visto que eso sucede en comunidades de videojuegos tristemente llenas de guiones para niños).
Lea otras preguntas en las etiquetas web-application denial-of-service