Добрый день.
Я использую в своем решении 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");