Страница asp razor возвращает код 400 при форме POST из iframe

Я пытаюсь опубликовать форму из iframe. Но я получаю ошибку 400 и не знаю почему. В iframe он показывает запросы GET, и я также установил "X-Frame-Options", "ALLOW-FROM ... в заголовках методов GET и POST.

Вот просьба:

Host: localhost:52136
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://localhost:52136/
Content-Type: application/x-www-form-urlencoded
Content-Length: 796
Connection: keep-alive
Upgrade-Insecure-Requests: 1

И ответ:

HTTP/1.1 400 Bad Request
Server: Kestrel
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcR2VydmlsIERvdWJhbFxzb3VyY2VccmVwb3NcQWNvbXBhIGNoYXJ0XE9ubGluZUFnZW5jeQ==?=
X-Powered-By: ASP.NET
Date: Tue, 18 Dec 2018 20:41:55 GMT
Content-Length: 0

Когда я отправляю ту же форму непосредственно с того же URL-адреса в браузере, я не получаю никаких ошибок.

Как исправить в iframe?

Похоже, это может быть проблема смягчения CSRF.

Kirk Larkin 18.12.2018 22:46

Как я могу это исправить?

user3502626 18.12.2018 22:48

Первое, что нужно сделать, это подтвердить, действительно ли проблема в этом. Вы можете временно отключить проверку CSRF, используя предложение здесь.

Kirk Larkin 18.12.2018 22:50

Я просто установил [IgnoreAntiforgeryToken (Order = 1001)] для моей pageModel, и он нормально перенаправился. Но раньше я хранил некоторые данные во временных данных. Но после перенаправления временные данные не содержат данных, как при отправке формы напрямую.

user3502626 18.12.2018 23:18

Я не знаю конкретных деталей того, как это работает с iframe, но похоже, что файлы cookie не отправляются, когда вы делаете запрос изнутри своего iframe. Надеюсь, это даст вам хоть что-то, на что стоит обратить внимание.

Kirk Larkin 18.12.2018 23:21

В порядке. Я сосредоточусь на этих временных данных позже. Что делать с проблемой смягчения CSRF? потому что я не могу отключить AntiforgeryToken из соображений безопасности.

user3502626 18.12.2018 23:24

Все это будет частью одного вопроса. И защита CSRF, и функция TempData используют файлы cookie.

Kirk Larkin 18.12.2018 23:32

Кроме того, я просто устанавливаю данные для файла cookie в действии публикации и получаю их обратно после перенаправления. Просто временные данные выглядят иначе, чем файл cookie.

user3502626 18.12.2018 23:39

После некоторого теста я вижу, что cookie работает в IFrames, но не в сеансе.

user3502626 19.12.2018 18:14
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
9
1 223
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я столкнулся с такой же ошибкой при использовании основного приложения Asp.net (Razor Pages) в Iframe на сайте SharePoint Online.

Решение:

Добавьте следующую конфигурацию в файл Startup.cs вашего основного приложения asp.net. (возможно, вам придется добавить ссылку на Microsoft.AspNetCore.Mvc)

Шаг 1

Включите Политика безопасности контента, чтобы добавить родительский URL-адрес в доверенные домены CORS.

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.Use(async (context, next) =>    
    {
        context.Response.Headers.Add("Content-Security-Policy", "frame-ancestors https://mysharepointparentsite.sharepoint.com/");
        await next();
    });
}

Шаг 2 Включите проверку Игнорировать токен защиты от подделки.

public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().AddRazorPagesOptions(_options =>
    {
        _options.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute());
    });
}

Кроме того, вам необходимо проверить, не написали ли вы код для предотвращения CSRF, как показано ниже:

options.Filters.Add (новый AutoValidateAntiforgeryTokenAttribute ()); в файле запуска ().

На это ушло 5 часов, как я пытался с JSONP, CORS и CSRF.

Другие вопросы по теме