Я знаю, что сайты Stack Exchange не используют встроенную в ASP.NET MVC @Html.AntiForgeryToken()
для предотвращения атак XSRF / CSRF.Вместо создания скрытого ввода с именем __RequestVerificationToken
со значением действительно длинное на основе раздела machineKey файла web.config, метод Stack Exchange создает вход с именем fkey
с MUCH более краткое значение.Это, по-видимому, Guid, и, основываясь на свидетельствах проекта Stack Exchange Data Explorer в Google Code , это значение привязано к каждому отдельному пользователю, оставаясь достаточно постоянным до тех пор, пока вы не войдете или не выйдете.
Кроме того, значение Stack Exchange постоянно на странице и доступно клиентскому скрипту, так что Ajax публикует сообщения для голосования и тому подобное, также использует токен.В отличие от этого
Так почему же Stack Exchange марширует на своего собственного барабанщика?
- Есть ли причина не доверять AntiForgeryToken?
- Есть ли у AntiForgeryToken некоторые ограничения, которыекоманда Stack Exchange не желала принимать?Если да, то чем они были?
- Или, может быть, AntiForgeryToken просто не было рядом (он начал свою жизнь в проекте MVC Futures), когда было запущено переполнение стека, и если бы у них было это с нуля сегодня, они бы использовалиAntiForgeryToken?
Мне не удалось найти ни одного сообщения в блоге от Джеффа или других сотрудников команды Stack Exchange, чтобы объяснить руководящие принципы, лежащие в основе политики предотвращения XSRF в сети SE.Было бы здорово, если бы кто-то из них мог написать рецензию, если, конечно, предположить, что это можно сделать в общих чертах, не создавая уязвимости.Это была бы действительно ценная информация для тех из нас, кто хочет обезопасить свои веб-сайты, но не совсем уверен, просто слепо доверяет Microsoft сделать это за нас.