Molto rischioso.
Il primo potrebbe essere usato per eseguire operazioni sul database sbagliato, probabilmente ignorando le restrizioni di accesso (non credo che pensi possa accedere al database interno MySQL a causa del carattere di sottolineatura, ma potrei sbagliarmi ). Il secondo potrebbe essere manipolato per accedere a qualsiasi file "functions.php" nel filesystem, e se si consente anche il caricamento di file, questo potrebbe consentire l'iniezione di codice senza restrizioni. Non ne so abbastanza su PHP per conoscere l'intera gamma di iniezione di codice consentita dal terzo esempio, ma sembra molto pericoloso (ad esempio, passare una funzione di "sistema").
Modifica
Il modo corretto per gestire l'input dell'utente è sviluppare una whitelist che descriva l'input "noto sicuro". Nel caso di $function
, ciò significa un elenco di nomi di funzioni accettabili; per mysql_select_db
, un elenco di valori per $table
a cui l'utente può accedere. Se viene visualizzato un valore non valido per l'input dell'utente, respingere l'intera transazione con un messaggio di errore adeguatamente vago. Qualsiasi altra cosa sta solo invitando i problemi di aggressori più intelligenti di te.