Альтернатива CSRF в Django
Я запускаю приложение Django внутри iframe, который с php размещен на другом сервере. Все работает, кроме POST запроса, я получаю ошибку только в Firefox:
Request failed with status code 403 > CSRF verification failed > CSRF cookie not set
Ранее у меня было предупреждение Samesite ( Некоторые cookies неправильно используют рекомендуемый атрибут "SameSite"), которое я решил, разрешив Samesite secure в php скрипте:
PHP:
ini_set('session.cookie_httponly',1);
ini_set('session.use_only_cookies',1);
$cookieParams = session_get_cookie_params();
$cookieParams[samesite] = "None";
$cookieParams[secure] = true;
session_set_cookie_params($cookieParams);
session_start();
Предупреждение исчезло, но куки по-прежнему не передаются через iframe, но присутствуют в Chrome. Поэтому я думаю, что я могу пропустить куки и отправить их через Axios, потому что я использую Axios для отправки запроса:
JS:
axios.defaults.xsrfCookieName = 'csrftoken';
axios.defaults.xsrfHeaderName = "X-CSRFTOKEN";
const config =
{
headers: {
'method':'POST',
'accept': '*/*',
'content-type': 'application/json;charset=UTF-8',
withCredentials: true,
'X-CSRFTOKEN': window.csrf_token,
//csrfmiddlewaretoken: window.csrf_token
}
};
axios.post(url, datas, config).then((res) => {....
Settings.py:
CSRF_TRUSTED_ORIGINS = ['https://myPhpsite.com', 'myPhpsite.com']
CSRF_COOKIE_SAMESITE = 'None'
CSRF_COOKIE_SECURE = True
SESSION_COOKIE_SECURE = True
SESSION_COOKIE_SAMESITE = 'None'
CORS_ALLOW_CREDENTIALS = True
После того, как я связал много вещей, я думаю отключить csrf, закомментировав 'django.middleware.csrf.CsrfViewMiddleware',. Если я сделаю это, будет ли это альтернативой csrf, чтобы получить защиту, как обеспечивает csrf?