Я хочу смоделировать / продемонстрировать атаку CSRF.С Django я настраиваю сайт (a.com) и один URL (/ foo /) не включает анти-CSRF-контент.
Сначала я сделал этот URL доступным без входа в систему.Я вижу, что запрос POST (см. Код ниже) выполнен успешно.(На самом деле, я столкнулся с проблемой no Access-Control-Allow-Origin
, содержание документа #main
не обновлено. Но сообщение сделано со статусом 200. Т.е. Деньги переведены на мой счет:).
Итак Я успешно провел CSRF-атаку .
Затем я включаю a.com/foo/
в login_required()
, что означает, что вам нужно сначала войти на сайт a.com, прежде чем выполнять действия в a.com/foo/
стр.
1) Я выполнил вход на одной из вкладок Chrome a.com.
2) А затем я открываю другую вкладку в этом же окне Chrome и открываю localhost:8000
(см. Ниже).
Когда я запускаю функцию JS, POST начинает получать статус 302 (перенаправление на страницу входа в систему a.com
вместо 200 OK ранее).
Почему ?Если это так, то как CSRF-атаки полезны / возможны для страниц, требующих входа в систему другого домена?
JS-код для выполнения поддельного запроса (от localhost: 8000 и т. Д., Другойдомен):
function hack_it() {
var http = new XMLHttpRequest();
var url = 'https://a.com/foo/';
var params = 'name=hacker&amount=200';
http.open('POST', url, true);
//Send the proper header information along with the request
http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
http.onreadystatechange = function() {//Call a function when the state changes.
if(http.readyState == 4 && http.status == 200) {
document.getElementById("main").innerHTML = http.responseText;
}
}
http.send(params);
}