Моделирование CSRF атаки в Django

Я пытаюсь понять, как работают CSRF-токены, в настоящее время моя цель - создать ситуацию, в которой возможна CSRF-атака. Я размещаю два приложения Django локально на разных портах. К одному я обращаюсь по localhost:8000, к другому по 127.0.0.1:5000 - это гарантирует, что cookies не будут общими между приложениями. Есть представление API

class ModifyDB(APIView):
    
    def post(self,request,format=None):
       
        if request.user.is_authenticated:
            return Response({'db modified'})

        else:
            return Response({'you need to be authenticated'})

к которым не должны иметь доступ неаутентифицированные пользователи.

На "вредоносном" сайте есть кнопка, которая должна вызвать атаку, когда пользователь заходит на целевой сайт:

const Modify = () => {

    const onClick = async e => { e.preventDefault();
        
        const instance = axios.create({
            withCredentials: true,
            baseURL: 'http://localhost:8000',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json',
            }
         })
         
        const res = await  instance.post('/api/modifydb');
        return res.data
    }

  return (
    <button class = 'btn' onClick = {onClick}> send request </button>
  )
}

Мои настройки аутентификации следующие:

REST_FRAMEWORK = {
    
    'DEFAULT_AUTHENTICATION_CLASSES': [
     
        'my_proj.settings.CsrfExemptSessionAuthentication',
       
    ],
}

где CsrfExemptSessionAuthentication - это пользовательский класс, который отключает защиту csrf для моих образовательных целей:

class CsrfExemptSessionAuthentication(SessionAuthentication):

    def enforce_csrf(self, request):
        return 

django.middleware.csrf.CsrfViewMiddleware также отключен. Оба параметра CORS_ALLOW_ALL_ORIGINS и CORS_ALLOW_CREDENTIALS установлены в true. Мой первый вопрос: что я делаю не так, потому что когда я вхожу на атакованный сайт, этот axios запрос с вредоносного сайта возвращает ответ "you need to be authenticated". Я ожидал, что каким-то образом sessionid cookie будет включен и запрос будет успешным (это логика этого типа атаки, если я правильно понимаю). Второй вопрос: будет ли CSRF атака возможна, если CORS не разрешен?

Вернуться на верх