Не получается смоделировать csrf атаку

У меня есть два домена "http://basic" и "http://test". Я хочу отправить отправить запрос с домена "http://test" на домен "http://basic" с подмененным csrf токеном.

Как это выглядит Шаг 1. На домене "http://basic" в htaccess разрешаю отправку X-CSRF-Token - токенов, разрешаю отправку методом POST, и разрешаю запросы с любых доменов

Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "POST"
Header always set Access-Control-Allow-Headers "X-CSRF-Token"

Далее на домене "http://test" размещаю следующий скрипт:

Шаг 2. Беру токен с домена "http://basic"

<?php
preg_match_all('/name="csrf-token" content="(.*?)"/', file_get_contents("http://basic/web/index.php?r=new/show"), $t);
$token=$t[1][0];
?>

Шаг 3. Отправляю токен на тот же домен "http://basic/"

$.ajax({
    type: "POST",
    url: "http://basic/web/index.php?r=new/post",
    beforeSend: function(xhr){xhr.setRequestHeader('X-CSRF-Token', '<?=$token?>');},
    success: function(data){
        alert( data );
    }
});

Ожидаю ответа от контроллера. Ответ "400 Bad Request".

Что я делаю не так?


Ответы (1 шт):

Автор решения: Ипатьев

вот этот вывод на мой взгляд НЕ ВЕРНЫЙ.

Какое забавное проявление эффекта Даннинга-Крюгера :)
Могу порекомендовать и другие выводы, с которыми тоже можно понесоглашаться. Например, что земля круглая.

А если сеньёзно, то с чего вы решили что для разных клиентов токен будет один и тот же?
Спойлер: он будет разный. В чём, собственно, и состоит простейший механизм работы CSRF токенов.

→ Ссылка