Mi scuso in anticipo per la natura generica della mia domanda, ma non sono riuscito a trovare alcun consiglio utile da parte di persone che cercavano di fare la stessa cosa di me sul web. Lasciatemi descrivere il mio scenario:ASP.NET MVC 3 Razor View Restrictions
Sto fornendo agli utenti finali/progettisti di un sito Web la possibilità di personalizzare le loro viste memorizzando le viste (usando Razor) nel database. Ho tutto questo lavoro, ma la mia domanda è la seguente; Dal punto di vista della sicurezza, come posso garantire e applicare il codice indesiderato che non viene eseguito nella vista definita dall'utente? Ci sono due approcci di base che penso funzioneranno concettualmente, ma non sono sicuro quale sia il più possibile o fattibile.
Opzione 1: creare un metodo di convalida nello strumento di amministrazione che consente all'utente di immettere il codice di visualizzazione. Ciò richiederebbe un approccio di whitelist o blacklist a ciò che è consentito o meno.
Opzione 2: impedisce l'esecuzione del codice indesiderato durante il rendering della vista.
Come esempio rapido di qualcosa che deve essere bloccato, non desideriamo consentire l'accesso per leggere o scrivere file, accedere a qualsiasi funzione di accesso ai dati o persino accedere alle impostazioni di configurazione, ecc. Nel web.config . Probabilmente ci sarà un elenco di cose di dimensioni decenti che probabilmente non dovrebbero essere consentiti, ma dovrò sedermi e provare a pensare al maggior numero possibile di problemi legati alla sicurezza.
La mia domanda è, quale metodo sarebbe la migliore scommessa? Inoltre, è possibile fornire una guida su come procedere? Pensavo di poter apportare modifiche basate sul livello di fiducia che sarebbero state l'Opzione 2, ma non sono riuscito a trovare un modo per farlo funzionare in un ambiente gestito da vista (il codice di amministrazione è autorizzato a eseguire qualsiasi cosa voglia). Penso che l'opzione 1 finirà per essere la migliore scommessa e dovrò verificare l'input di alcune funzioni di framework che non dovrebbero essere consentite. Qualcuno ha qualche esperienza facendo qualcosa di simile a quello che sto cercando di fare? QUALSIASI feedback è molto apprezzato!
L'opzione 2 sarebbe terribile dal punto di vista dell'utente che potrebbe provare a utilizzare codice che altrimenti non sapeva fosse "cattivo". Sono d'accordo con SLaks un approccio alla lista bianca sarebbe meglio, e non conosco la natura esatta del tuo progetto come chi sono i tuoi consumatori, ma questo sarà un compito difficile a seconda di quanta flessibilità hai bisogno di dare loro. – AwDogsGo2Heaven
Stavo per suggerire di controllare Liquid markup, poi ho trovato [DotLiquid] (http://dotliquidmarkup.org/try-online). Sembra che copra ciò che stai cercando di realizzare (ma con Liquid invece di Razor). –