□ View— указывает представление, которое нужно показать пользователю при срабатывании атрибута;
□ Master— указывает наименование Master View, которое будет использоваться при демонстрации пользователю представления;
□ Order— указывает на последовательный номер, в порядке которого атрибут будет исполняться.
Для демонстрации работы атрибута HandleErrorAttributeсоздадим представление AdminError, которое будет использоваться только тогда, когда произойдет ошибка при работе с контроллером AdminController. В листинге 4.3 представлен код представления.
runat="server">
Ошибка! Произошло необработанное исключение.
runat="server">
Внимание
<���р>При работе сайта произошла исключительная
ситуация в действии
контроллера .
Ниже представлена дополнительная информация об исключении:
Обратите внимание, для получения доступа к расширенной информации об исключении мы используем свойство Modelобъекта ViewData, предварительно приведя его к типу HandleErrorInfo. Механизм атрибута HandleErrorAttributeсоздает для представления элемент типа HandleErrorInfo, объект которого содержит следующие данные:
□ ActionName— имя действия, в котором произошло исключение;
□ ControllerName— имя контроллера, в котором произошло исключение;
□ Exception- объект типа Exception, в котором содержится вся информация об исключении, в том числе строка сообщения и трассировка стека.
Для того чтобы проверить наше представление, создадим для тестирования новое действие TestExceptionв контроллере AdminController:
public ActionResult TestException()
{
throw new Exception("Проверка исключения");
}
Пометим наш контроллер AdminControllerатрибутом HandleErrorAttributeв следующем виде, как это показано во фрагменте:
[HandleError(View = "AdminError")]
public class AdminController : Controller
Теперь, чтобы механизм атрибута HandleErrorAttribute заработал, необходимо включить механизм Custom Errors в файле web.config так, как показано во фрагменте:
После запуска приложения и попытки доступа к действию TestExceptionмы получим сообщение об ошибке (рис. 4.8).
Кроме перечисленного, атрибут HandleErrorAttributeимеет ряд важных особенностей:
□ если механизм Custom Errors запрещен, или исключение уже было обработано другим атрибутом, то исполнение атрибута прекращается;

□ если исключение является HTTP-исключением с кодом, отличным от 500, исполнение атрибута прекращается. Другими словами, этот атрибут не обрабатывает HTTP-исключения с любыми кодами ошибок, кроме 500;
□ атрибут устанавливает Response.TrySkipIisCustomErrors = trueдля того, чтобы попытаться переопределить страницы веб-сервера, настроенные для отображения ошибок;
□ атрибут устанавливает код HTTP-ответа в значение 500, которое сообщает клиенту о возникшей при запросе ошибке.
Использование атрибута HandleErrorAttribteпозволяет гибко настраивать реакцию вашего приложения на возникновение исключительных ситуаций.
Вы можете определять для каждого контроллера, действия или типа исключения свои представления вывода информации об ошибке.
ValidateAntiForgeryTokenAttribute
Проблема безопасности в современном Интернете не заканчивается вместе с проверкой права доступа на базе неких правил, ролей или пользователей.
Вместе с возможностями защиты от несанкционированного доступа изменяются и способы проникновения и взлома защиты. Одним из таких способов проникнуть через защиту сайта является атака под названием Cross-site Request Forgery Attack (CSRF). Суть этой атаки заключается в следующем:
□ сайт должен иметь авторизацию по cookies, а пользователь, через которого планируется атака, должен иметь возможность автоматической авторизации;
□ на некой специальной странице в Интернете создается элемент формы со скрытыми параметрами и автоматическим отправлением этих данных по адресу сайта, на котором зарегистрирован пользователь;
□ при посещении страницы, подготовленной злоумышленником, пользователь, сам того не предполагая, авторизуется на своем сайте и выполняет некий запрос, который может делать все, что угодно, от простого принудительного "выхода" пользователя из системы до отправки неких данных на сервер в контексте авторизованного пользователя.
Читать дальше
Конец ознакомительного отрывка
Купить книгу