Jump to content

xzolsu

Administrators
  • Content Count

    194
  • Joined

  • Last visited

  • Days Won

    11

Everything posted by xzolsu

  1. Научные публикации по данному вопросу тут.
  2. Вставляю для себя, но может кому тоже пригодится. СМИ говорит одно, через день другое, так вот, чтобы знать когда кто что говорил.
  3. Для правильной работы серверов, необходимо верное выставленное время, в чем и помагает NTP. NTP - сетевой протокол для синхронизации внутренних часов компьютера с использованием сетей с переменной латентностью. Для установки на debian и ему подобных делаем следующее: //Обновим кеш $: apt update //Обновим прграммы $: apt upgrade //Ставим ntp $: apt install ntp ntpdate //конфигурационые файлы тут $: vim /etc/ntp.conf //смотрим расхождение по времени своего и сервака с которым синхронизируется $: ntpdate -q ru.pool.ntp.org //синхронизируем $: ntpdate -bs ru.pool.ntp.org //стартуем сервис $: service ntp start
  4. Прочёл книгу "Хакеры", от "Этногинез" и лично моё мнение: - Довольно зачётный экзепляр, который приятно читать и многое захватывает из реальности, а может и полностью, сложно сказать, в последнее время со мной происходят мистические вещи, которые никак не обьяснить.
  5. Битрикс, в своей жизни я с ним сталкивался много раз. И вот что могу сказать по нему, одной картинкой:
  6. Зарегился. Там регистрация не простая Но успешно внутри. Надо виртуалку поднять для полноценной работы. Буду смотреть что к чему.
  7. 12 принципов эффективного управления временем. Самоуважение. Я даю больше чем беру и самоуважение моё растёт. Вознаграждение. Чем больше даю, тем больше получаю. Затраты, конечный продукт. Какой конечный результат от меня ожидают. Максимальная польза от управления верменем. Время весьма скудный ресурс. Если чтото не сделал, этого уже не вернуть. Рассудительность, самостоятельность, самодисциплина. Нацеленность на рузультат. Работать качественнее. Умелое обращение - залог хорошего настроения. Управление временем и самодисциплина формирует личность и веру в себя. Длительная мотивация основана на успехе. Данная минута, данный момент - это всё время, которым я располагаю.
  8. Вся работа с letsencrypt укладывается в пару строчек: import "golang.org/x/crypto/acme/autocert" m := &autocert.Manager{ Cache: autocert.DirCache("golang-autocert"), Prompt: autocert.AcceptTOS, HostPolicy: autocert.HostWhitelist("NameProject", "www."+NameProject), } server := &http.Server{ Addr: ":443", TLSConfig: m.TLSConfig(), Handler: router, } server.ListenAndServeTLS("", "") Где router - router *mux.Router Полный пример: import ( "fmt" "github.com/gorilla/mux" _ "github.com/gorilla/mux" log "github.com/sirupsen/logrus" "golang.org/x/crypto/acme/autocert" "net/http" "os" ) func main(){ router := mux.NewRouter() router.HandleFunc("/robots.txt", func(w http.ResponseWriter, r *http.Request) { err := r.ParseForm() if err != nil { log.Println(err) } http.ServeFile(w, r, "robots.txt") }).Methods("GET") m := &autocert.Manager{ Cache: autocert.DirCache("golang-autocert"), Prompt: autocert.AcceptTOS, HostPolicy: autocert.HostWhitelist("nameproject.org", "www.nameproject.org"), } server := &http.Server{ Addr: ":443", TLSConfig: m.TLSConfig(), Handler: router, } server.ListenAndServeTLS("", "") }
  9. Как работает 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);
  10. Она еще от mail group же, а все прекрасно знают истории с vk. Написал - пошутил - посидел.
  11. Да, я примерно столько же
  12. Примерно по 10GB весит IDE JetBrains, открыто PHPStorm + Goland, + google chrome просто ест оперативу.
  13. Видать угнали. Пятизнаки запрещали через mail востанавливать, вот и до 6-ти знаков дошли, наверное.
  14. Средняя ежедневная нагрузка на рабочий пк у меня такой: А какая у вас?
  15. Ошибка: 413 Request Entity Too Large Причина: Nginx по default запросы пропускает не более 1мб. Решение: Либо уменьшите запрос, либо правьте конфиг: server { .... client_max_body_size 32m; ... } 32m - увеличивайте по необходимости.
  16. Выдержка из wiki: CSRF - (англ. Сross Site Request Forgery — «межсайтовая подделка запроса», также известна как XSRF) — вид атак на посетителей веб-сайтов, использующий недостатки протокола HTTP. Если жертва заходит на сайт, созданный злоумышленником, от её лица тайно отправляется запрос на другой сервер (например, на сервер платёжной системы), осуществляющий некую вредоносную операцию (например, перевод денег на счёт злоумышленника). Для осуществления данной атаки жертва должна быть аутентифицирована на том сервере, на который отправляется запрос, и этот запрос не должен требовать какого-либо подтверждения со стороны пользователя, которое не может быть проигнорировано или подделано атакующим скриптом. вид Т.е.: Есть пользователь- "исследователь" - Есть пользователь - "испытуемый" - И есть сервак с имеющейся уязвимостью "CSRF/XSRF": Реализация выглядит схематично так: Словесно: "Испытуемый" заходит на дружественный проект, где нет CSRF/XSRF защиты, делает свои дела, и отправляется сёрфить инет, заходит на сайт товарища "исследователя", видит кнопочку - "Кликни и будет тебе удача во всем", кликает по ней и в тот же момент, ну почти в тот же, испытуемый изменяет пароль на своем дружественном проекте, сам того не ведая, ну и конечно получает "+ к карме и удачу в своих делах". P.S.: Знания используются как во вред окружающим, так и во благо, тёмный путь не всегда более денежный. Знания должны быть общедоступны. Человек сам решает как поступить с новыми знаниями. У вас своя голова на плечах мои верные k0d'еры.
  17. Агентство по кибербезопасности и безопасности инфраструктуры (CISA) выложило ТОП-10 уязвимостей: https://www.us-cert.gov/ncas/alerts/aa20-133a
  18. Задача: Бывает неоходимо откатить локальные коммиты и на удаленном репозитории и делаем это так: Устанавливаем tig (ну как пример лишь, чтобы увидеть hash коммита) Решение: выполняем локально: Эта команда откатит ваши изминения навсегда и восстановить их будет ооочень сложно или даже не возможно. Будьте аккуратнее! get reset --hard 6ec45adb9708a2347d7d64ec39b0f37004ce0f2f Чтобы вырезать коммиты в удаленном репозитории: Эта команда откатит ваши изминения навсегда и востановить их будет ооочень сложно или даже не возможно. Будьте аккуратнее! git push -f
  19. Ошибка: При работе с git можно получить такое: "remote: GitLab: You are not allowed to force push code to a protected branch on this project." Всё дело в том, что в gitlab ваша ветка стоит как: "protected": Решение:
  20. При выполнении: php composer.phar update получаете нечто подобное: requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system. Решение: apt install php7.3-mbstring
  21. Mysql: Выбрать строку с самой старшей датой: SELECT * FROM table WHERE dateColumn = (SELECT MAX(dateColumn) FROM table where id = 123) AND id = 123;
  22. Очередной месяц подошел к концу. Итоги: Щас право дело нет криптовалюты. Пишите в личку, договоримся
×
×
  • Create New...