Tienes razón al afirmar que hay muchas formas de proteger tu aplicación de ataques como XSS y SQLi. Desafortunadamente, hay muchas razones por las que estos tipos de ataques siguen siendo el tipo de ataque más popular. Considere las siguientes posibles razones por las cuales la seguridad no siempre se maneja en un proyecto:
Código heredado : hay muchas aplicaciones que se crearon hace años antes de que las consideraciones de seguridad se volvieran un poco más populares. Normalmente, estas aplicaciones no tienen mucho desarrollo continuo, pero aún están disponibles en línea
Desarrolladores / Ingenieros : el enfoque de estas personas generalmente inteligentes es crear aplicaciones que respondan a una necesidad empresarial. Si el individuo no está al tanto de los tipos de ataques que pueden ocurrir, simplemente no se prepararán para ello, ya que su objetivo es construir y desplegar la aplicación. Si nunca pensó en el hecho de que no se puede confiar en el usuario, ¿cómo podría defenderse de él?
Restricciones de tiempo : los presupuestos comerciales rara vez asignan tiempo suficiente para las pruebas de seguridad, ya que son relativamente caros y, como cualquier desarrollador puede decirle. Casi siempre hay un aumento en el alcance que se come en el presupuesto de prueba
Cambio rápido en los marcos tecnológicos : muchos desarrolladores / ingenieros deben asimilar las nuevas tecnologías con bastante rapidez. Obtener suficiente información para crear el proyecto no siempre le deja suficiente tiempo para obtener una comprensión adecuada de las opciones de seguridad disponibles en el marco
Estas son solo algunas de las posibles razones. Mi opinión personal es que el desarrollo de aplicaciones seguras en la actualidad requiere al menos algún tipo de interés adicional por parte de los desarrolladores / ingenieros / arquitectos. Los fundamentos se están abriendo paso lentamente en la mayoría de los planes de estudio de las universidades y otras instituciones de formación.
EDIT : al principio funcioné en mi móvil y no vi los comentarios duplicados. Su pregunta definitivamente se ha abordado mucho mejor aquí: La inyección SQL tiene 17 años. ¿Por qué sigue ahí?