Este es un problema de quién controla el código. Dejemos de lado que hay algunos marcos modernos como node para JavaScript en el lado del servidor.
Los lenguajes en sí mismos no son necesariamente más vulnerables. La mayoría de las fallas no son resultados del lenguaje subyacente, sino de varias comprobaciones lógicas, sensibilización de entrada, etc.
Dicho esto, no puede controlar el código del lado del cliente, lo que significa que el usuario local puede modificarlo. También puede ser modificado por un ataque de hombre en el medio en la red o por un ataque de hombre en el navegador donde el atacante ha comprometido la máquina / navegador local.
En el lado del servidor, tendrían que irrumpir en su servidor para modificar el código. Sin embargo, eso no significa que el código sea necesariamente más seguro.
Si bien puede modificar el JavaScript a través de su inspector de código localmente, si hiciera algo malicioso, se lo haría a usted mismo. Solo porque cambies el código no significa que afectará a otros usuarios. Sin embargo, puede crear ataques contra la solicitud de página que luego envíe a otra persona, lo que resultará en XSS o CSRF. Esto daría lugar a un ataque contra el usuario. Al mismo tiempo, puede cambiar la solicitud para que las solicitudes o datos maliciosos se envíen al servidor y se produzca un desbordamiento del búfer o una inyección de código (por ejemplo, inyección de SQL).
Una de las diferencias es que puede crear un ataque más fácilmente si tiene acceso al código. Ya que puede ver la fuente del HTML y JavaScript, puede ser más fácil crear un exploit, pero ese mismo conocimiento podría llevar a crear una inyección SQL.
Ahora, hasta tu último punto. Debe asegurarse de que todas sus comprobaciones de seguridad se realicen en el lado del servidor porque no puede confiar en la validación del lado del cliente, ya que solo afecta lo que está ocurriendo en el navegador. Un atacante localmente o MiTM aún puede cambiar el tráfico HTTP sin procesar, lo que resultaría en que la validación del lado del cliente sea efectivamente ignorada. La validación del lado del cliente es una conveniencia para sus usuarios y para ahorrar algunos ciclos en su servidor.