RazorEngine — как сделать запрет использования Namespace при генерации страницы?

Добрый день.

Я использую в своем решении RazorEngine для генерации динамических страниц, получаемых из базы.
Сами страницы (Вьюхи), обычные пользователи сайта могут редактировать в своем кабинете.
(Используется для генерации PDF файлов, DOC файлов, и MasterPage их личной страницы).

Пример:
<p>Total to pay: @Model["PAYABLE"] @Model["CURRENCY"]</p>

Или
@foreach(string link in Model.StylesLinks){
	<link rel="stylesheet" href="@link" />
}

Весь функционал реализован, однако возникла одна большая дырка в системе.
Теперь любой пользователь может выполнить совершенно любой код.
Например, он запросто может вывести список соединений:

@foreach (System.Configuration.ConnectionStringSettings conn in System.Configuration.ConfigurationManager.ConnectionStrings)
{
    @:@conn.ConnectionString<br/>
}

Затем, используя это соединение, он может подключиться к базе, и сделать все что угодно.

Вопрос: как можно запретить использовать namespace, например "System"?

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Просто заменять в тексте слово "System" на другое не подходит. Всегда можно получить класс просто по имени. ( + есть еще много способов это сделать)
Type sys = Type.GetType("Sys" + "tem.Configuration.ConfigurationManager");
  • Вопрос задан
  • 2601 просмотр
Решения вопроса 1
lam0x86
@lam0x86
Не стоит давать пользователям возможность писать view на разоре. Даже если запускать рендеринг страниц в отдельном AppDomain, урезав права на исполнение вредоносного кода, всегда остается вероятность, что пользователь напишет что-то массивное, что будет грузить ядро процессора на 100%, из-за чего сайт станет недоступен.
Гораздо надёжнее (но и сложнее, конечно) сделать свой Domain Specific Language, который будет расширять обычный HTML специальными конструкциями, необходимыми для вашего приложения.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Применять другой движок шаблонизации.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы