Mi piace l'idea di "codice come dati" per la configurazione, perché la convalida ottenuta dalle classi del caso è la stessa convalida che si desidera per un file di configurazione. Twitter ha scritto una bella utility Eval che rende questo facile (https://github.com/twitter/util). Vorrei consentire agli utenti di caricare i file di configurazione su un servizio remoto. Questo apre il potenziale per iniettare codice contro il mio servizio remoto.Come si può forzare Scala Eval di Twitter per prevenire l'iniezione di codice? Vorrei limitare Eval alla specifica dei parametri di configurazione
Per esempio, se ho la seguente classe caso config:
case class MyConfig(param1: String)
vorrei che l'utente sia in grado di caricare un file contenente il comando:
MyConfig(param1 = "My Param Value")
... ma non un file contenente il comando:
MyConfig(param1 = {import someDangerousPackage; someDangerousCommand(); "My Param Value"})
C'è un modo per intercettare la compilazione per assicurarsi che no vengono chiamate le funzioni?
Se si dispone già delle classi case, perché non si utilizza semplicemente la configurazione tipesa per il file di configurazione e si estrae da lì? – drexin
dare un'occhiata a http://code.google.com/p/scalascriptengine/ Penso che forniscano alcune opzioni di sicurezza di base – vitalii
Se creo e convalido un'istanza della classe case utilizzando un file HOCON Config Typesafe, i miei numeri di linea potrebbero riflettere la classe di casi generata, non l'HOCON originale - a meno che non fraintenda l'approccio ... –