Sto lavorando su react-metaform e una delle mie sfide è che ho bisogno di consentire all'utente finale di definire i metadati come funzioni. Esempio:Come posso verificare se una funzione è una funzione pura?
socialSecurityNumber.required: (m) => m.type == 'person'
Il problema è ovvio: non posso fidarmi dell'utente. Quindi, queste sono le precauzioni che sto pensando di fare:
- Le funzioni definite dall'utente dovrebbe essere pura funzione. Nel senso che, queste funzioni possono accedere solo ai loro parametri, nient'altro.
- Le funzioni definite dall'utente verranno eseguite in un ambiente che resiste alle eccezioni, a tempi di esecuzione troppo lunghi e a cicli infiniti. (Non sono preoccupato per questo adesso).
La domanda è: Come faccio certo una funzione definita dall'utente accede solo i suoi parametri e nient'altro?
Vorrei assumere la soluzione migliore è quella di definire il proprio linguaggio delle espressioni che viene analizzato e quindi valutato sui tuoi oggetti reali, piuttosto che usare 'new Function'. – Bergi
http://stackoverflow.com/questions/14889393/how-to-run-a-javascript-function-in-a-sandbox-environment – epascarello
Penso che dal momento in cui chiedi all'utente di scrivere JS ed eseguirlo sono praticamente fatti per Non è possibile impedire lunghi tempi di esecuzione (esecuzione a completamento, sì!) O assicurarsi che la funzione sia pura (magari con ombreggiamento massiccio dei parametri, ma sarebbe strano). –