Защита форм, ссылок "Удалить" и других действий, зависящих от прав доступа текущего пользователя
Представим, что на вашем сайте выводится компонент новостей, в котором есть возможность удалить новость. Ссылка на удаление выглядит таким образом:[CODE]www.mysite.ru/news/detail.php?ID=123&delete=Y[/CODE]Далее недоброжелатель помещает эту ссылку в форуме, например, в теге <img src="www.mysite.ru/news/detail.php?ID=123&delete=Y" />. Зайдя на этот форум и будучи авторизованным на сайте www.mysite.ru, вы, ничего неподозревая, удалите новость c идентификатором 123. Т.о. даже несмотря на проверку прав доступа в компоненте, недображелатель сможет удалить новость на вашем сайте. Для защиты от таких атак следует дополнительно проверять идентификатор сессии текущего пользователя, передавая его в ссылке или в скрытом поле формы.
Для этого в продукте есть ряд функций в помощь:
string bitrix_sessid() - возвращает идентификатор сессии, предварительно обработанный функцией md5.
bool check_bitrix_sessid($varname='sessid') - возвращает true, если верно условие $_REQUEST[$varname] == bitrix_sessid(), иначе false.
string bitrix_sessid_get($varname='sessid') - возвращает строку вида $varname=идентификатор сессии
string bitrix_sessid_post($varname='sessid') - возвращает строку вида <input type="hidden" name="$varname" id="$varname" value="идентификатор сесии" />
[B]Передача идентификатора сессии в форме[/B][CODE]<form method="post" action="/news/add.php">
<?=bitrix_sessid_post()?>
Title: <input type="text" name="NAME" size="40" maxlength="255" value="">
</form>[/CODE][B]Передача идентификатора в ссылке[/B][CODE]<a href="/news/detail.php?ID=123&delete=Y&<?=bitrix_sessid_get()?>">Удалить</a>[/CODE][B]Проверка сессии[/B][CODE]if($arResult["Perm"]>=BLOG_PERMS_MODERATE && intval($_GET["delete_comment_id"])>0 && check_bitrix_sessid())
{
/*Удаление комментария*/
} [/CODE]
Источник: статья в блоге http://dev.1c-bitrix.ru/community/blogs/cookbook/163.php