Pido disculpas de antemano por la naturaleza genérica de mi pregunta, pero no pude encontrar ningún consejo útil de personas que intentan hacer lo mismo que yo en la web. Permítanme describir mi escenario:ASP.NET MVC 3 Razor View Restrictions
Proporciono a los usuarios finales/diseñadores de un sitio web la posibilidad de personalizar sus vistas almacenando las vistas (usando Razor) en la base de datos. Tengo todo esto funcionando, pero mi pregunta es la siguiente; Desde el punto de vista de la seguridad, ¿cómo puedo garantizar y hacer cumplir que el código no deseado no se ejecuta en la vista definida por el usuario? Hay dos enfoques básicos que creo que funcionarán conceptualmente, pero no estoy seguro de cuál es más posible o factible.
Opción 1: Cree un método de validación en la herramienta de administración que permita al usuario ingresar el código de vista. Esto necesitaría tomar una lista blanca o una lista negra para lo que es permisible o no.
Opción 2: evitar que el código no deseado se pueda ejecutar cuando se produce el renderizado de la vista.
Como un ejemplo rápido de algo que tendría que bloquearse, no nos gustaría permitir el acceso a leer o escribir archivos, acceder a funciones de acceso a datos, ni siquiera acceder a la configuración, etc. en la web.config . Es probable que haya una lista decente de cosas que probablemente no deberían permitirse, pero tendré que sentarme y tratar de pensar en tantas preocupaciones relacionadas con la seguridad como sea posible.
Mi pregunta es, ¿qué método sería la mejor opción? Además, ¿se puede proporcionar alguna dirección sobre cómo proceder? Pensé que podría hacer un cambio basado en el nivel de confianza que sería la Opción 2, pero no pude encontrar ninguna forma de hacerlo funcionar en una casa solar basada en vista (el código de administración puede ejecutar lo que quiera). Estoy pensando que la Opción 1 terminará siendo la mejor y tendré que verificar la entrada de ciertas funciones de marco que no deberían permitirse. ¿Alguien tiene alguna experiencia haciendo algo como lo que estoy tratando de hacer? CUALQUIER comentario es muy apreciado!
La opción 2 sería terrible desde la perspectiva de un usuario que puede tratar de usar un código que él o ella no sabía que era 'malo'. Estoy de acuerdo con SLaks en que un enfoque de lista blanca sería mejor, y no conozco la naturaleza exacta de su proyecto, como quiénes son sus consumidores, pero esta será una tarea difícil en función de la flexibilidad que necesite darles. – AwDogsGo2Heaven
Iba a sugerirle que revisara el marcado líquido, luego encontré [DotLiquid] (http://dotliquidmarkup.org/try-online). Parece que cubre lo que intentas lograr (pero con Liquid en lugar de Razor). –