История изменений
Исправление vbr, (текущая версия) :
Смотри. У нас есть сайт fakelor. На нём javascript-ом выполняют код, который посылает HTTP POST запрос на сайт лора. Браузер так работает, что посылает с этим запросом твои куки. Т.е. на сайт лора приходит запрос с твоими куками, который, например, создаёт тему с рекламой. И ты про это вообще не в курсе.
Чтобы такого не происходило, придумали csrf токен. Когда ты открываешь реальный лор, в теге будет скрытый input с каким-то значением (токеном). Этот токен генерируется на сервере и сервер знает, что он сгенерировал. Когда ты с реального лора посылаешь форму на сервер, токен будет в запросе и сервер проверит его. А если другой сайт попробует подобное сделать, у него ничего не получится. Он не сможет вытащить валидный токен с чужого сайта. Ты можешь посылать на чужой сайт POST запрос с формой. Но послать на чужой сайт GET запрос и пропарсить ответ ты не можешь (точней можешь, но только если чужой сайт будет кооперироваться, лор не будет).
Это древнее решение древней проблемы.
Сегодня есть решение проще. На авторизационную куку ты можешь поставить атрибут SameSite=Strict. В этом случае браузер не будет её отправлять при кросс-сайтовых запросах. Т.е. если другой сайт попробует отправить javascript-ом форму, то браузер просто не добавит туда эту куку и запрос будет будто от анонима. И всё, никаких токенов не нужно. Очень удобно. Но если кто-то 20 лет назад реализовал защиту на csrf токенах, она и сегодня будет прекрасно работать. Ну и SameSite всё же требует браузера, выпущенного хотя бы в последние 5 лет, а CSRF работает везде. С учётом специфической аудитории лора, может быть CSRF и лучше.
Исправление vbr, :
Смотри. У нас есть сайт fakelor. На нём javascript-ом выполняют код, который посылает HTTP POST запрос на сайт лора. Браузер так работает, что посылает с этим запросом твои куки. Т.е. на сайт лора приходит запрос с твоими куками, который, например, создаёт тему с рекламой. И ты про это вообще не в курсе.
Чтобы такого не происходило, придумали csrf токен. Когда ты открываешь реальный лор, в теге будет скрытый input с каким-то значением (токеном). Этот токен генерируется на сервере и сервер знает, что он сгенерировал. Когда ты с реального лора посылаешь форму на сервер, токен будет в запросе и сервер проверит его. А если другой сайт попробует подобное сделать, у него ничего не получится. Он не сможет вытащить валидный токен с чужого сайта. Ты можешь посылать на чужой сайт POST запрос с формой. Но послать на чужой сайт GET запрос и пропарсить ответ ты не можешь (точней можешь, но только если чужой сайт будет кооперироваться, лор не будет).
Это древнее решение древней проблемы.
Сегодня есть решение проще. На авторизационную куку ты можешь поставить атрибут SameSite=Strict. В этом случае браузер не будет её отправлять при кросс-сайтовых запросах. Т.е. если другой сайт попробует отправить javascript-ом форму, то браузер просто не добавит туда эту куку и запрос будет будто от анонима. И всё, никаких токенов не нужно. Очень удобно. Но если кто-то 20 лет назад реализовал защиту на csrf токенах, она и сегодня будет прекрасно работать. Ну и SameSite всё же требует браузера, выпущенного хотя бы в последние 5 лет, а CSRF работает везде. С учётом специфики пользователей лора, может быть CSRF и лучше.
Исходная версия vbr, :
Смотри. У нас есть сайт fakelor. На нём javascript-ом выполняют код, который посылает HTTP POST запрос на сайт лора. Браузер так работает, что посылает с этим запросом твои куки. Т.е. на сайт лора приходит запрос с твоими куками, который, например, создаёт тему с рекламой. И ты про это вообще не в курсе.
Чтобы такого не происходило, придумали csrf токен. Когда ты открываешь реальный лор, в теге будет скрытый input с каким-то значением (токеном). Этот токен генерируется на сервере и сервер знает, что он сгенерировал. Когда ты с реального лора посылаешь форму на сервер, токен будет в запросе и сервер проверит его. А если другой сайт попробует подобное сделать, у него ничего не получится. Он не сможет вытащить валидный токен с чужого сайта. Ты можешь посылать на чужой сайт POST запрос с формой. Но послать на чужой сайт GET запрос и пропарсить ответ ты не можешь (точней можешь, но только если чужой сайт будет кооперироваться, лор не будет).
Это древнее решение древней проблемы.
Сегодня есть решение проще. На авторизационную куку ты можешь поставить атрибут SameSite=Strict. В этом случае браузер не будет её отправлять при кросс-сайтовых запросах. Т.е. если другой сайт попробует отправить javascript-ом форму, то браузер просто не добавит туда эту куку и запрос будет будто от анонима. И всё, никаких токенов не нужно. Очень удобно. Но если кто-то 20 лет назад реализовал защиту на csrf токенах, она и сегодня будет прекрасно работать.