ГлавнаяБлогПравильное удаление элементов [bitrix api]

Правильное удаление элементов [bitrix api]

Рамиль Юналиев
Рамиль Юналиев
E-Commerce Lead
29 января 2010 г.
1 мин чтения

При удалении элементов через URL вида www.site.ru/news/detail.php?ID=777&del=Y возникает CSRF-уязвимость. Атакующий может внедрить на стороннем сайте изображение с таким URL:

<img src="www.site.ru/news/detail.php?ID=777&del=Y" />

Когда авторизованный администратор откроет страницу с этим изображением, браузер выполнит запрос и элемент будет удалён без его ведома.

Решение — сессионные идентификаторы Bitrix

Bitrix API предоставляет четыре функции для защиты от CSRF:

  • bitrix_sessid() — возвращает идентификатор текущей сессии (md5)
  • check_bitrix_sessid($varname='sessid') — проверяет совпадение идентификатора
  • bitrix_sessid_get($varname='sessid') — возвращает строку для передачи в URL
  • bitrix_sessid_post($varname='sessid') — возвращает скрытое поле для формы

Пример реализации

if ($arResult["Perm"] >= BLOG_PERMS_MODERATE && 
    intval($_GET["delete_comment_id"]) > 0 && 
    check_bitrix_sessid()) {
    /* удаление */
}

Теперь атакующий не сможет повторить удаление — идентификатор сессии в запросе будет отличаться от серверного.