Наше приложение является посредником по оплате, где наш процесс оформления заказа поддерживает как перенаправление, так и оформление iframe. Для предотвращения CSRF-атак мы используем стандартную реализацию MVC AntiForgeryToken. Тем не менее, небольшой процент наших проверок завершается неудачно с ошибкой, указывающей на отсутствие файла cookie AntiForgeryToken.
Из журналов мы суммировали, что эти ошибки возникают только тогда, когда пользовательский агент является либо Mobile Safari, либо редко браузером Samsung, различных версий и платформ. версии.
Мы не можем быть уверены, что эти ошибки возникают только тогда, когда они встроены в iframe, однако мы не смогли надежно воспроизвести эти ошибки из перенаправленной или встроенной версии. Еще более удивительным является то, что стандартные проблемы с файлами cookie Safari и сторонних производителей также не объясняют этого, поскольку во всех случаях мы можем судить по журналам о наличии файла cookie ASP.NET_SessionId.
Мы попытались установить заголовок P3Pв ответе: HttpContext.Response.AddHeader("p3p", "CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");
, но это не помогло.
Кроме того, мы уверены, что это происходит и для законных пользователей, а не только для злоумышленников (при условии, что любой из них является вредоносным). И чтобы убедиться в очевидности, все эти запросы содержат запись формы HTTP, содержащую __RequestVerificationToken
, но без файла cookie.
Кроме того, все зарегистрированные ошибки содержат следующее: The required anti-forgery cookie "__RequestVerificationToken_L3Yx0" is not present.
Мы не былив состоянии объяснить приложение _L3Yx0
. Чтобы быть ясным, хотя, приложение не проблема, или, по крайней мере, не единственная, потому что мы не получаем cookie в первую очередь.
Какие возможные объяснения есть для этого странного поведения, и что можетмы делаем, чтобы предотвратить проблему?