soy muy buena parte de la opinión de que la programación correcta protegerá contra estos riesgos. Cosas como evitar las funciones en desuso, que (al menos en las bibliotecas de Microsoft C++) son obsoletas debido a las vulnerabilidades de seguridad y validar todo lo que cruza un límite externo.
Las funciones que se llaman únicamente desde el código no deberían requerir la validación de parámetros excesiva ya que el control de la persona que llama, es decir, sin límite externo es atravesado. Las funciones llamadas por el código de otras personas deben asumir que los parámetros entrantes serán inválidos y/o maliciosos en algún momento.
Mi aproximación al tratamiento de funciones expuesta es simplemente chocar a cabo, con un mensaje muy útil si es posible. Si la persona que llama no puede obtener los parámetros correctos, entonces el problema está en su código y deberían solucionarlo, no usted. (Obviamente usted ha proporcionado documentación de su función, ya que está expuesto.)
Inyección de código es sólo un problema si la aplicación es capaz de elevar el usuario actual. Si un proceso puede inyectar código en su aplicación, podría escribir fácilmente el código en la memoria y ejecutarlo de todos modos. Sin poder obtener acceso completo al código del sistema, los ataques de inyección no tienen sentido. (Esta es la razón por la cual las aplicaciones utilizadas por los administradores no deberían ser escribibles por usuarios menores.)
Lo que usted describe también se conoce como YAGNI - http://en.wikipedia.org/wiki/YAGNI – abyx