CSRF-атаки (Cross-Site Request Forgery – подделка межсайтовых запросов) – вид атак на посетителей веб-сайтов, использующий недостатки протокола HTTP. Вредоносный веб-сайт заставляет браузер пользователя выполнить нежелательное действие на доверенном сайте. Для осуществления данной атаки жертва должна быть авторизована на том сервере, на который отправляется запрос, и этот запрос не должен требовать какого-либо подтверждения со стороны пользователя, который не может быть проигнорирован или подделан атакующим скриптом.
CSRF-атака использует функцию браузера автоматической отправки идентификатора сессии с каждым GET/POST-запросом к веб-приложению. Атакующий находит ссылки, которые могут выполнять определенные операции, причем, как правило, эти функции доступны только для привилегированных пользователей. Это могут быть операции перевода денег, перенаправления почты на другой электронный ящик, сброса пароля, покупки каких-либо товаров и многое другое. Попав на страницу, находящуюся под контролем атакующего, жертва невольно совершит переход по ссылке, уязвимой к CSRF, и выполнит операцию в контексте целевого веб-приложения.
Для проверки, не содержит ли идентификатор страницы вредоносный код, используется метод парсера checkId($id), где $id – код () страницы.
Пример использования метода:
$id = $parser->utils->getFieldFromSql("SELECT objid FROM sys_objects WHERE (objtype='sys_elements_pages') AND (objid='".($parser->conn->escape($parser->checkId($aa)))."') ",'');
Также при использовании MVC1 происходит фильтрация от вредоносного кода при парсинге адреса страницы на отдельные сегменты (controller, action и т.д.). Подробнее о составляющих адреса страницы в MVC1 читайте в Контроллер.
В целях безопасности пришедшие $_GET, $_POST, $_REQUEST данные в MVC1 помещаются в свойство request базового контроллера и могут использоваться в любом методе контроллера-наследника следующим образом:
$this->name = (isset($this->request['name'])) ? $this->request['name'] : ''; $this->description = (isset($this->request['description'])) ? $this->request['description'] : '';