La maggior parte delle lingue moderne (che sono in qualche modo interpretate) hanno qualche tipo di funzione eval . Tale funzione esegue codice di linguaggio arbitrario, per la maggior parte del tempo passato come argomento principale come stringa (lingue diverse possono aggiungere più funzioni alla funzione eval).
Capisco che agli utenti non dovrebbe essere permesso di eseguire questa funzione ( modifica cioè di prendere direttamente o indirettamente input arbitrari da un utente arbitrario da passare a eval
), specialmente con il software lato server, dal momento che potrebbero forzare il processo per eseguire codice dannoso. In questo modo, tutorials e community ci dicono di non utilizzare eval. Tuttavia, ci sono molte volte in cui eval è utile e usato:
- Regole di accesso personalizzate agli elementi software (IIRC OpenERP ha un oggetto
ir.rule
che può usare il codice python dinamico). - Calcoli e / o criteri personalizzati (OpenERP ha campi simili per consentire calcoli di codice personalizzati).
- parser di report OpenERP (sì, lo so che ti sto facendo impazzire con le cose di OpenERP ... ma è l'esempio principale che ho)
- Codifica gli effetti degli incantesimi in alcuni giochi di ruolo.
Quindi hanno un buon uso, a patto che vengano usati correttamente. Il vantaggio principale è che la funzione consente agli amministratori di scrivere codice personalizzato senza dover creare più file e includerli (sebbene la maggior parte dei framework che usano le caratteristiche di eval abbiano anche un modo per specificare un file, un modulo, un pacchetto, ... da leggere).
Tuttavia, eval è malvagio nella cultura popolare. Mi viene in mente qualcosa di simile al tuo sistema.
Tuttavia, ci sono altre funzioni che potrebbero essere dannose se in qualche modo accessibili dagli utenti: scollegare, leggere, scrivere (semantica del file), allocazione della memoria e aritmetica del puntatore, accesso al modello di database (anche se non si considerano casi iniettabili SQL). / p>
Quindi, in pratica, la maggior parte delle volte in cui qualsiasi codice non è scritto correttamente o non guardato correttamente (risorse, utenti, ambienti, ...), il codice è malvagio e può portare anche all'impatto economico.
Ma c'è qualcosa di speciale con le funzioni eval
(indipendentemente dalla lingua).
Domanda : c'è qualche fatto storico per cui questa paura diventa parte della cultura popolare, invece di prestare la stessa attenzione alle altre caratteristiche potenzialmente pericolose?