Для чего нужен токен в URL?
Вероятно, Вы могли заметить, что в одной известной социальной сети в адресах страниц встречается параметр вида tkn=xmkNwOoIT1KLElgaMeAo0A. Я хочу вкратце рассказать, зачем он используется.
Как известно, при отправке запроса серверу, браузер отправляет также заголовки, содержащие cookies соответствующего домена, в которых обычно хранится идентификатор сессии. Таким образом серверный скрипт понимает, что Вы сейчас залогинены и имеете доступ к определённым файлам сессии. Окей.
Предположим, на некотором домене N имеется страница обновления профиля, обрабатывающая запрос вида
profile.php?name=Vasja&surname=Pupkin
При отправке такого запроса данные в анкете соответственно изменяются.
Скажите, если бы Вы были залогинены и Вам пришло сообщение с такой ссылкой, Вы бы зашли по ней? Думаю, нет. А если бы ссылка вела на сайт somepage? Да запросто бы зашли. И тут начинается самое интересное. На сайте somepage имеется одна единственная картинка:
<img src="http://N/profile.asp?name=Vasja&surname=Pupkin" alt="[Image]" />
Что же сделает браузер? Верно, он выполнит запрос N/profile.php?name=Vasja&surname=Pupkin, ожидая получить MIME-тип image/jpeg. Конечно же, браузер к этому запросу добавит заголовки, содержащие cookies домена N, включая Ваш идентификатор сессии. Данные Вашего профиля будут успешно изменены, пока Вы, ничего не подозревая, будете любоваться картинкой somepage/image.jpg.
Еще вам нужно знать, что данный вид атаки называется CSRF — Cross Site Request Forgery (подделка межсайтовых запросов). Одним из вариантов предотвращения атаки является использование токена – обновляемого при каждом запросе случайно сгенерированного значения, хранящегося в сессии и добавляемого в URL. Если токен, переданный в GET-запросе, не совпадает с токеном, хранящимся в сессии, то запрос, вероятно, сформирован на другом сайте. Поскольку данные, хранящиеся в сессии не покидают пределов сервера, злоумышленник сможет узнать токен, только похитив cookies или заполучив URL с токеном, по которому жертва перешла последний раз.
Вывод простой: никогда не показывайте незнакомым дядям свои cookies и url, пока Вы залогинены.