Muy arriesgado.
El primero podría usarse para realizar operaciones en la base de datos incorrecta, posiblemente evitando las restricciones de acceso (no creo que podría acceder a la base de datos interna de MySQL debido al guión bajo, pero podría estar equivocado ). El segundo podría ser manipulado para acceder a cualquier archivo "functions.php" en el sistema de archivos, y si también permite la carga de archivos, esto podría permitir la inyección de código sin restricciones. No sé lo suficiente sobre PHP para conocer la gama completa de inyección de código permitida por el tercer ejemplo, pero parece muy peligroso (por ejemplo, pasar una función de "sistema").
Editar:
La forma correcta de lidiar con la entrada del usuario es desarrollar una lista blanca que describa la entrada de "seguro conocido". En el caso de $function
, eso significa una lista de nombres de funciones aceptables; para mysql_select_db
, una lista de valores para $table
que el usuario puede acceder. Si ve un valor no válido para la entrada del usuario, rechace la transacción completa con un mensaje de error adecuadamente vago. Cualquier otra cosa es simplemente invitar a los atacantes que son más inteligentes que tú.