Al crear una aplicación web de n niveles / capas en la que cada nivel está físicamente separado de los demás, ¿es importante que una pila de comunicación diferente sea utilizada por los niveles de fondo (que no están expuestos a Internet)? que el nivel web que es?
Al ser consciente de la seguridad en la creación de una aplicación web, estoy creando un servidor de aplicaciones de nivel medio (backend-tier) que maneja todo el acceso a los datos de la aplicación web para que el servidor web nunca tenga acceso directo a la base de datos.
He pensado que necesito hacer que el servidor de aplicaciones use un protocolo de comunicación diferente al expuesto en el servidor web. Si mi nivel intermedio expone los servicios web HTTP / REST utilizando la misma pila de tecnología que el servidor web, ¿no se pondría en peligro tan fácilmente el nivel intermedio?
Como tal, he estado haciendo que el nivel intermedio se comunique mediante un protocolo TCP binario mientras el servidor web expone los servicios web HTTP / REST. El lado negativo de esto es toda la sobrecarga adicional. Necesito definir las interfaces dos veces (una para el servidor de aplicaciones y otra para el servidor web) y debo tratar con dos bibliotecas / protocolos de comunicación y sus peculiaridades.
¿Es esta la complejidad que exige el desarrollo de aplicaciones web seguras? ¿Tengo razón al necesitar usar diferentes protocolos / bibliotecas el servidor de aplicaciones y el servidor web?
Editado para agregar: Esto se refiere a la mitigación en caso de que el servidor web se vea comprometido. El servidor web puede hacer mucho menos que el nivel medio (más notablemente, no acceder a la base de datos). Un atacante que comprometa el servidor web sería malo; pero, lograr un acceso sin restricciones a la base de datos sería mucho peor.