Jump to content

Search the Community

Showing results for tags 'forbidden csrf'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Mans
    • Linux
    • Windows
  • Coding
    • Php
    • Golang
    • JavaScript | Node.js
    • Python|Ruby
    • C|C++|C#
    • Other
    • DataBases
  • Underground
    • Security and its research
    • Hack Tools
    • Social engineering
    • Phreaking
    • TV
    • Spam
    • For beginners
  • Games
    • Generals
  • Other
    • News
    • Creative and Design
    • The Internet
    • SEO
    • Freebie
    • Training courses
    • Video Tutorials
    • Trading floor
    • Verstka
    • Talker
  • k0d.biz
    • Contests
    • Questions, comments and more
    • Site and forum news
    • Violations, complaints

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


About Me

Found 1 result

  1. Как работает csrf/xsrf можно понять тут. Однако, при использование библиотеки https://github.com/gorilla/csrf можно получить такую ошибку вида: Forbidden - CSRF token invalid В итоге, после долгих ковырялок пришел к выводным результатам, которые не указаны конкретно в документации к либе, я не нашел: token передаваемый в загаловке + переданные куки _gorilla_csrf при сложении на серваке оказались не верны, из - за того, что при отправке на сервак, куки надо отдавать, те, которые выданы для определенного uri(path), с которого прийдет запрос на сервак. Подробнее: Пример правильного получения токена и кук с подробным, ну на мой взгляд, описанием: Сторона go: func main() { router := mux.NewRouter() fs := http.FileServer(http.Dir("")) router.Handle("/", fs) //######отдаем статику router.HandleFunc("/dist/{filename}", func(w http.ResponseWriter, r *http.Request) { err := r.ParseForm() if err != nil { log.Println(err) } vars := mux.Vars(r) http.ServeFile(w, r, "dist/"+vars["filename"]) }).Methods("GET") //###########END response Static csrfMiddleware := csrf.Protect( []byte("qweqw2hg23r1kul3oyukhjefw3fsafzv"), //32 битный ключ csrf.Secure(true), //при использовании http - ставьте false, https - true, по дефолту идёт - true ) //добавляем subrouter на api - тут те пути, которые будут использовать csrf от gorilla api := router.PathPrefix("/api").Subrouter() api.Use(csrfMiddleware) /* ap */ api.HandleFunc("/ap/empty-apartment", controllers.GetEmptyApartments).Methods("GET") api.HandleFunc("/ap/{id:[0-9]+}", controllers.SetApartment).Methods("POST") api.HandleFunc("/ap/delete", controllers.DeleteApartment).Methods("DELETE") //... //api.HandleFunc("другие uri ... //констансты выше обьявлены const URI_USER_GET_USER = "/user/getUser" const URI_USER_ENTER = "/user/enter" const URI_USER_REGISTRATION = "/user/registration" const URI_USER_EXIT = "/user/exit" //.. //user api.HandleFunc(user.URI_USER_GET_USER, controllers.GetUser).Methods("GET") api.HandleFunc(user.URI_USER_ENTER, controllers.Enter).Methods("GET") api.HandleFunc(user.URI_USER_REGISTRATION, controllers.Registration).Methods("POST") api.HandleFunc(user.URI_USER_EXIT, controllers.Exit).Methods("GET") api.Use(middlewareLogs.LogUri) api.Use(middlewareUser.CheckAccess) api.Use(middlewareUser.CheckRights) api.Use(middlewareUser.SetToHeader_CSRF_Token) //тут накидываем хендлер на отдачи по запросу в заголовке токен, сама функция будет ниже //########### fmt.Println("Server is listening...") //поднимаем https и указываем handler'om - router log.Fatal(http.ListenAndServeTLS(":443", "./tls/rootCA.pem", "./tls/rootCA.key", router)) //https } вот функция навешывания в возвратный заголовок токена, вот так, как в документации: /** csrf to header */ func SetToHeader_CSRF_Token(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Header().Set("X-CSRF-Token", csrf.Token(r)) next.ServeHTTP(w, r) }) } Теперь переходим к стороне JS, front часть: Сначала обьясню текстом: На каждый uri(path) приходится своя кука _gorilla_csrf, а так же при запросе вы получаете токен от метода SetToHeader_CSRF_Token. При запросах к серваку, под защитой csrf надо будет передать обратно полученную куку по данному uri, так и сам токен в в заголовке. Если вы передадите не верный куки или токен, то получете как раз ошибку Forbidden - CSRF token invalid. Графически: кодом: const instance = axios.create({ timeout: 1000, headers: { "X-CSRF-Token": getters.userCsrfToken} //getters.userCsrfToken - полученный ранее. }); return instance.post('/api/user', payload);
×
×
  • Create New...