Note #46: Методы оценки безопасности для проектов Go 👮♂️
Ребята который проводили аудит безопасности k8s этим летом, опубликовали интересную статью о методах оценки безопасности в Go проектах [1]:
В статье говорится о:
- Статическом анализе (gosec, go-vet, and staticcheck, ineffassign, errcheck), кстати, о gosec я писал недавно https://yangx.top/golang_for_two/70);
- динамическом анализе: фаззинг, property testing (leanovate/gopter)
- кратко о codecoverage ( от себя добавлю визуализация codecov с помощью coveralls/codecov.io очень помогает)
и еще много полезностей 👇
https://blog.trailofbits.com/2019/11/07/attacking-go-vr-ttps/
Ребята который проводили аудит безопасности k8s этим летом, опубликовали интересную статью о методах оценки безопасности в Go проектах [1]:
В статье говорится о:
- Статическом анализе (gosec, go-vet, and staticcheck, ineffassign, errcheck), кстати, о gosec я писал недавно https://yangx.top/golang_for_two/70);
- динамическом анализе: фаззинг, property testing (leanovate/gopter)
- кратко о codecoverage ( от себя добавлю визуализация codecov с помощью coveralls/codecov.io очень помогает)
и еще много полезностей 👇
https://blog.trailofbits.com/2019/11/07/attacking-go-vr-ttps/
Telegram
Go на двоих
Note #44: Golang security checker 👮♂️
Нашел тул, который помогает сканировать кодовую базу на различные секьюрити уязвимости:
- хардкодед явки и пароли
- байндинг на все сетевые интерфейсы (0.0.0.0:8001)
- поиск unsafe блоков кода
- конкатинация строк…
Нашел тул, который помогает сканировать кодовую базу на различные секьюрити уязвимости:
- хардкодед явки и пароли
- байндинг на все сетевые интерфейсы (0.0.0.0:8001)
- поиск unsafe блоков кода
- конкатинация строк…
Note #48: Top 10 talks from Golab 2019 based on youtube stats 🎞 🇮🇹
Как многие[1][2] заметили, появились видео с последней конференции Golab, которая прошла в октябре в Италии.
По традиции top 10:
GoLab 2019 - Roberto Clapis - Day 1 Closing Talk: It starts with a problem (https://youtu.be/f6v3b4Rzb6E)
GoLab 2019 - Italo Vietro - Designing for failure (https://youtu.be/BOn3R41UrV8)
Golab 2019 - Hadas Yaakobovitch - Migrating a Mission Critical Service to Go (https://youtu.be/vUEKL8zekXc)
GoLab 2019 - Bill Kennedy - Keynote: You Want To Build a Web Service? (https://youtu.be/IV0wrVb31Pg)
GoLab 2019 - Giovanni Bajo - Conference presentation (https://youtu.be/SR-nJpoXyOE)
GoLab 2019 - Klaus Post - Taming Mutexes for Concurrency (https://youtu.be/fTEL4GxjWLM)
GoLab 2019 - Eleanor McHugh - Keynote: An Introduction To Functional Programming In Go (https://youtu.be/nxydu5aPtjQ)
GoLab 2019 - Federico Paolinelli - Rpc on steroids with Go and Grpc (https://youtu.be/2VW1_EHdb_o)
GoLab 2019 - Fabio Falzoi - An insight into Go Garbage Collection (https://youtu.be/etRF1Cpx5Ok)
GoLab 2019 - Florin Pățan - Using Go Modules in everyday life (https://youtu.be/8NcHdaETMZw)
Links:
- https://yangx.top/oleg_log/2312
- https://yangx.top/count0_digest/3215
Как многие[1][2] заметили, появились видео с последней конференции Golab, которая прошла в октябре в Италии.
По традиции top 10:
GoLab 2019 - Roberto Clapis - Day 1 Closing Talk: It starts with a problem (https://youtu.be/f6v3b4Rzb6E)
GoLab 2019 - Italo Vietro - Designing for failure (https://youtu.be/BOn3R41UrV8)
Golab 2019 - Hadas Yaakobovitch - Migrating a Mission Critical Service to Go (https://youtu.be/vUEKL8zekXc)
GoLab 2019 - Bill Kennedy - Keynote: You Want To Build a Web Service? (https://youtu.be/IV0wrVb31Pg)
GoLab 2019 - Giovanni Bajo - Conference presentation (https://youtu.be/SR-nJpoXyOE)
GoLab 2019 - Klaus Post - Taming Mutexes for Concurrency (https://youtu.be/fTEL4GxjWLM)
GoLab 2019 - Eleanor McHugh - Keynote: An Introduction To Functional Programming In Go (https://youtu.be/nxydu5aPtjQ)
GoLab 2019 - Federico Paolinelli - Rpc on steroids with Go and Grpc (https://youtu.be/2VW1_EHdb_o)
GoLab 2019 - Fabio Falzoi - An insight into Go Garbage Collection (https://youtu.be/etRF1Cpx5Ok)
GoLab 2019 - Florin Pățan - Using Go Modules in everyday life (https://youtu.be/8NcHdaETMZw)
Links:
- https://yangx.top/oleg_log/2312
- https://yangx.top/count0_digest/3215
Note #49: CockroachDB и Cockroach University 🔭
Cockroach Labs, которые написали CockroachDB (кто не в курсе БД написана на гошечке), недавно выпустили интересный проект под названием: Cockroach University, и там уже есть первый пилотный курс “Getting Started With CockroachDB”. Очень похоже по смыслу на MongoDB University и Neo4J сертификацию :)
Для любителей сертификатов и других ачивок, если набрать 70% процентов и выше то выдадут сертификат бесплатно! Кстати, курс длится около 6 часов.
https://university.cockroachlabs.com/catalog
Cockroach Labs, которые написали CockroachDB (кто не в курсе БД написана на гошечке), недавно выпустили интересный проект под названием: Cockroach University, и там уже есть первый пилотный курс “Getting Started With CockroachDB”. Очень похоже по смыслу на MongoDB University и Neo4J сертификацию :)
Для любителей сертификатов и других ачивок, если набрать 70% процентов и выше то выдадут сертификат бесплатно! Кстати, курс длится около 6 часов.
https://university.cockroachlabs.com/catalog
Note # 50 shhgit 😎
Очередной тул на Go - может искать пароли использую Github Events API в режиме приближенном к реальному времени.
https://github.com/eth0izzle/shhgit
Ну и дашбордик https://shhgit.darkport.co.uk/
😱 Это эпично наблюдать за тем как люди коммитят пароли прям вот сейчас :)
За ссылку спасибо setevoy!
Очередной тул на Go - может искать пароли использую Github Events API в режиме приближенном к реальному времени.
https://github.com/eth0izzle/shhgit
Ну и дашбордик https://shhgit.darkport.co.uk/
😱 Это эпично наблюдать за тем как люди коммитят пароли прям вот сейчас :)
За ссылку спасибо setevoy!
GitHub
GitHub - eth0izzle/shhgit: Ah shhgit! Find secrets in your code. Secrets detection for your GitHub, GitLab and Bitbucket repositories.
Ah shhgit! Find secrets in your code. Secrets detection for your GitHub, GitLab and Bitbucket repositories. - eth0izzle/shhgit
Note #51: errwrap
Аслан Фатих в твиттере порадовал новым тулом, который анализирует вызовы
Links:
- [1] https://github.com/fatih/errwrap
Аслан Фатих в твиттере порадовал новым тулом, который анализирует вызовы
fmt.Errorf()
и заменяет дерективы %s, которые можно заменить на новые %w
(начиная с go 1.13):$ errwrap -fix main.go
main.go:14:9: call could wrap the error with error-wrapping directive %w
diff --git a/main.go b/main.go
index 41d1c42..6cb42b8 100644
--- a/main.go
+++ b/main.go
@@ -11,5 +11,5 @@ func main() {
func foo() error {
err := errors.New("bar!")
- return fmt.Errorf("failed for %s with error: %s", "foo", err)
+ return fmt.Errorf("failed for %s with error: %w", "foo", err)
}
Links:
- [1] https://github.com/fatih/errwrap
Note #52: Top 10 talks of Gopherpalooza 2019
Вчера появились видео докладов с последней Gopherpalooza 2019, возглавил список Robert Griesemer 💪:
1. Go is 10! Now What?" by Robert Griesemer – Gopherpalooza 2019 (https://youtu.be/i0zzChzk8KE)
2. Building Scalable Microservices with Go" by Natalie Serebryakova – Gopherpalooza 2019 (https://youtu.be/u5O-YdA27yE)
3. Demystifying Context Values" by Jason Wentworth – Gopherpalooza 2019 (https://youtu.be/NxNT1-S-tKg)
4. Go is a Graph" by Francesc Campoy – Gopherpalooza 2019 (https://youtu.be/66qpLGeXd4c)
5. Intro to AI for software engineers Using go-learn" by Miriah Peterson – Gopherpalooza 2019 (https://youtu.be/T0DVu1Ehl5Q)
6. Parsing Expression Grammars (PEG)" by Tim Raymond – Gopherpalooza 2019 (https://youtu.be/a37rQdV7LE4)
7. Write Once, Compile Lots, Run Anywhere" by James Bowes – Gopherpalooza 2019 (https://youtu.be/m_6quA_jYYY)
8. Discovery of Worst Case Go Sort Inputs" by Jack Lindamood – Gopherpalooza 2019 (https://youtu.be/VAsX3og5wPI)
Приятного просмотра! 📺
Вчера появились видео докладов с последней Gopherpalooza 2019, возглавил список Robert Griesemer 💪:
1. Go is 10! Now What?" by Robert Griesemer – Gopherpalooza 2019 (https://youtu.be/i0zzChzk8KE)
2. Building Scalable Microservices with Go" by Natalie Serebryakova – Gopherpalooza 2019 (https://youtu.be/u5O-YdA27yE)
3. Demystifying Context Values" by Jason Wentworth – Gopherpalooza 2019 (https://youtu.be/NxNT1-S-tKg)
4. Go is a Graph" by Francesc Campoy – Gopherpalooza 2019 (https://youtu.be/66qpLGeXd4c)
5. Intro to AI for software engineers Using go-learn" by Miriah Peterson – Gopherpalooza 2019 (https://youtu.be/T0DVu1Ehl5Q)
6. Parsing Expression Grammars (PEG)" by Tim Raymond – Gopherpalooza 2019 (https://youtu.be/a37rQdV7LE4)
7. Write Once, Compile Lots, Run Anywhere" by James Bowes – Gopherpalooza 2019 (https://youtu.be/m_6quA_jYYY)
8. Discovery of Worst Case Go Sort Inputs" by Jack Lindamood – Gopherpalooza 2019 (https://youtu.be/VAsX3og5wPI)
Приятного просмотра! 📺
Note #53: TIL dockerexec
Daniel Martí порадовал утилитой для запуска тестов внутри докера [1] 👌
tl;dr
Под капотом это просто обертка над
Также можно использовать и другие флаги докера:
P.S. Ожидается, что у вас установлен docker ;)
Links:
[1] https://github.com/mvdan/dockexec
Daniel Martí порадовал утилитой для запуска тестов внутри докера [1] 👌
tl;dr
go get mvdan.cc/dockexec
go test -exec='dockexec postgres:12.1'
Под капотом это просто обертка над
cmd := exec.Command("docker", allDockerArgs...)
и установленный test бинарь как —entrypoint
и —workdir
в текущую директорию.Также можно использовать и другие флаги докера:
go test -exec='dockexec [docker flags] image:tag' [test flags]
P.S. Ожидается, что у вас установлен docker ;)
Links:
[1] https://github.com/mvdan/dockexec
Note #54: Обфускация Go
И снова Daniel Martí за выходные выкатил проект, который создает бинарь, содержащий минимальное возможное кол-во информации об исходном коде из которого он был собран.
Что происходит внутри:
- удаляет дебаг информацию (DWARF);
- удаляет BuildInfo;
- заменяет полезные идентификаторы с помощью base64 кодировки
- и тд
Больше можно 👁 в исходном коде -> [1]
Links:
- [1] https://github.com/mvdan/garble
И снова Daniel Martí за выходные выкатил проект, который создает бинарь, содержащий минимальное возможное кол-во информации об исходном коде из которого он был собран.
Что происходит внутри:
- удаляет дебаг информацию (DWARF);
- удаляет BuildInfo;
- заменяет полезные идентификаторы с помощью base64 кодировки
- и тд
Больше можно 👁 в исходном коде -> [1]
Links:
- [1] https://github.com/mvdan/garble
Note #55: Пазлы для настоящего Гофера от Dave Cheney
Дэйв выкатил обновленные слайды c блиц вопросами к 10 летию Go 🎉.
Итак есть несколько простых правил:
- нужно не более 2 гоферов одновременно;
- играем до первого правильного ответа;
- играем пока не закончатся Гоферы или вопросы :)
Поехали -> 🚘
[1] https://talks.godoc.org/github.com/davecheney/presentations/gopher-puzzlers.slide#1
Дэйв выкатил обновленные слайды c блиц вопросами к 10 летию Go 🎉.
Итак есть несколько простых правил:
- нужно не более 2 гоферов одновременно;
- играем до первого правильного ответа;
- играем пока не закончатся Гоферы или вопросы :)
Поехали -> 🚘
[1] https://talks.godoc.org/github.com/davecheney/presentations/gopher-puzzlers.slide#1
Note #56: FOSDEM 2020
Если вы вдруг решили тоже поехать на FOSDEM 2020 и загляните в Go dev room, то сможете встретить там меня с докладом ;) Буду рад пообщаться лично!
А для тех кто решил остаться дома, постараюсь собрать как можно больше годноты и запостить в канал.
P.S. На всякий случай что такое FOSDEM и какие ещё есть аудитории, с докладами и расписание go dev room:
https://fosdem.org/2020/schedule/track/go/
Если вы вдруг решили тоже поехать на FOSDEM 2020 и загляните в Go dev room, то сможете встретить там меня с докладом ;) Буду рад пообщаться лично!
А для тех кто решил остаться дома, постараюсь собрать как можно больше годноты и запостить в канал.
P.S. На всякий случай что такое FOSDEM и какие ещё есть аудитории, с докладами и расписание go dev room:
https://fosdem.org/2020/schedule/track/go/
archive.fosdem.org
FOSDEM 2020 - Go devroom
Note #57: The state of Go on 02 02 2020
Сегодня Францеск и Maartje открыли Go Dev room на FOSDEM 2020, рассказали про то как обстоят дела в Go и какие изменения в языке/стандартной библиотеке были сделаны [1].
Slides: -> https://speakerdeck.com/campoy/the-state-of-go-2020
P.S. Кстати happy palindromic day! (02022020)
Сегодня Францеск и Maartje открыли Go Dev room на FOSDEM 2020, рассказали про то как обстоят дела в Go и какие изменения в языке/стандартной библиотеке были сделаны [1].
Slides: -> https://speakerdeck.com/campoy/the-state-of-go-2020
P.S. Кстати happy palindromic day! (02022020)
Speaker Deck
The State of Go 2020
The most important changes to Go since Go 1.12.
By Maartje Eyskens and Francesc Campoy
By Maartje Eyskens and Francesc Campoy
Note #58: The Zen of Go
По аналогии с Zen of Python, Dave Cheney представил The Zen of Go на GopherCon Israel 2020.
1. Each package fulfils a single purpose
2. Handle errors explicitly
3. Return early rather than nesting deeply
4. Leave concurrency to the caller
5. Before you launch a goroutine, know when it will stop
6. Avoid package level state
7. Simplicity matters
8. Write tests to lock in the behaviour of your package’s API
9. If you think it’s slow, first prove it with a benchmark
10. Moderation is a virtue
11. Maintainability counts
По ссылке есть описание каждого пункта -> https://the-zen-of-go.netlify.com/.
P.S. возможно добавить сюда https://github.com/andriisoldatenko/proverbs? или пусть живет отдельно.
По аналогии с Zen of Python, Dave Cheney представил The Zen of Go на GopherCon Israel 2020.
1. Each package fulfils a single purpose
2. Handle errors explicitly
3. Return early rather than nesting deeply
4. Leave concurrency to the caller
5. Before you launch a goroutine, know when it will stop
6. Avoid package level state
7. Simplicity matters
8. Write tests to lock in the behaviour of your package’s API
9. If you think it’s slow, first prove it with a benchmark
10. Moderation is a virtue
11. Maintainability counts
По ссылке есть описание каждого пункта -> https://the-zen-of-go.netlify.com/.
P.S. возможно добавить сюда https://github.com/andriisoldatenko/proverbs? или пусть живет отдельно.
Note #59: Релиз кандидат (RC1) для Go 1.14
Из наиболее значимого в go 1.14 внесли изменения в спецификацию языка, а именно, теперь разрешается встраивать интерфейсы с пересекающимися наборами методов.
Возвращаясь к реальной жизни давайте разберем пример типичного интерфейса:
Duplicate method GetUser(userID uint64) (model.User, error)
Если запустить
P.S. эта проблема была еще озвучена Алоном Донованом в 2013 году!!! [1]
Links:
[1] spec: allow embedding overlapping interfaces https://github.com/golang/go/issues/6977
[2] Proposal https://github.com/golang/proposal/blob/master/design/6977-overlapping-interfaces.md
Из наиболее значимого в go 1.14 внесли изменения в спецификацию языка, а именно, теперь разрешается встраивать интерфейсы с пересекающимися наборами методов.
Возвращаясь к реальной жизни давайте разберем пример типичного интерфейса:
package userИ допустим у меня есть несколько других пакетов, из которые я тоже хочу доставать информацию о пользователе, поэтому нам необходимо встроить интерфейс user.Database в hardware.Database и тоже самое для wallet.Database:
type Database interface {
GetUser(userID uint64) (model.User, error)
}
package hardwareНу и классика жанра, прилетает задача где нужно создать интерфейс shopping.Database который должен в себе содержать методы hardware.Database и wallet.Database:
type Database interface {
user.Database
SaveDevice(usertID uint64, device model.Device) error
}
package wallet
type Database interface {
user.Database
ReadWallet(userID uint64) (model.Wallet, error)
}
package shoppingИ в go версии меньше чем go 1.14 мы получим ошибку:
type Database interface {
wallet.Database
hardware.Database
Buy(userID uint64, deviceID uint64) error
}
Duplicate method GetUser(userID uint64) (model.User, error)
Если запустить
go1.14rc1 run main.go
то все будет ок 🎉P.S. эта проблема была еще озвучена Алоном Донованом в 2013 году!!! [1]
Links:
[1] spec: allow embedding overlapping interfaces https://github.com/golang/go/issues/6977
[2] Proposal https://github.com/golang/proposal/blob/master/design/6977-overlapping-interfaces.md
Note #60: GoWeekly and FOSDEM
Как я уже писал в https://yangx.top/golang_for_two/82 в этом году я выступал на FOSDEM 2020 в потоке Go, кстати это был мой первый FOSDEM =).
Видео моего выступления с FOSDEM попало в рассылку GoWeekly 🎉
https://golangweekly.com/issues/298
P.S.
[1] slides: bit.ly/adv_debug_goF0SD3M
[2] video: https://www.youtube.com/watch?v=2kjmLQY8RJk
Как я уже писал в https://yangx.top/golang_for_two/82 в этом году я выступал на FOSDEM 2020 в потоке Go, кстати это был мой первый FOSDEM =).
Видео моего выступления с FOSDEM попало в рассылку GoWeekly 🎉
https://golangweekly.com/issues/298
P.S.
[1] slides: bit.ly/adv_debug_goF0SD3M
[2] video: https://www.youtube.com/watch?v=2kjmLQY8RJk
Note #61 govalidate 🌳
TIL: Если запустить
До:
$ govalidate
[✗] Go (go1.13)
Your current Go version (go1.13) is old.
Current Go versions are go1.14, go1.13.8, .
Visit https://golang.org/dl/ for a new version.
[✔️] Checking if $PATH contains "/Users/andrii/workspace/bin"
[✔️] Checking gcc for CGO support
[✔️] Vim Go plugin
после upgrade go:
$ govalidate
[✔️] Go (go1.14)
[✔️] Checking if $PATH contains "/Users/andrii/workspace/bin"
[✔️] Checking gcc for CGO support
[✔️] Vim Go plugin
P.S. thanks Jaana Dogan @rakyll for govalidate
P.P.S
TIL: Если запустить
govalidate
, то можно убедиться, что вы используете не последнюю версию Go 😜До:
$ govalidate
[✗] Go (go1.13)
Your current Go version (go1.13) is old.
Current Go versions are go1.14, go1.13.8, .
Visit https://golang.org/dl/ for a new version.
[✔️] Checking if $PATH contains "/Users/andrii/workspace/bin"
[✔️] Checking gcc for CGO support
[✔️] Vim Go plugin
после upgrade go:
$ govalidate
[✔️] Go (go1.14)
[✔️] Checking if $PATH contains "/Users/andrii/workspace/bin"
[✔️] Checking gcc for CGO support
[✔️] Vim Go plugin
P.S. thanks Jaana Dogan @rakyll for govalidate
P.P.S
$ go get -u github.com/rakyll/govalidate
Note #62 GopherCon Russia 2020
Мои старые друзья 28 марта проводят GopherCon Russia 2020! В этому году у меня не получается поехать :(
Но! У меня есть 1 билет, который я подарю тому, кто первый напишет в чате канала(кнопка discuss), как придумали название известной консольной утилиты “grep”?
Удачи :)
P.S. подробности и регистрация на сайте: https://www.gophercon-russia.ru/
Мои старые друзья 28 марта проводят GopherCon Russia 2020! В этому году у меня не получается поехать :(
Но! У меня есть 1 билет, который я подарю тому, кто первый напишет в чате канала(кнопка discuss), как придумали название известной консольной утилиты “grep”?
Удачи :)
P.S. подробности и регистрация на сайте: https://www.gophercon-russia.ru/
Note #63 A new Go API for Protocol Buffers
В официальном #golang блоге появилась статья про новый Go API для Protocol Buffers.
Рекомендую почитать! ->
https://blog.golang.org/a-new-go-api-for-protocol-buffers
В официальном #golang блоге появилась статья про новый Go API для Protocol Buffers.
Рекомендую почитать! ->
https://blog.golang.org/a-new-go-api-for-protocol-buffers
go.dev
A new Go API for Protocol Buffers - The Go Programming Language
Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.
Note #64 New net/url.URL.Redacted method in go 1.15
В Go1.15 появится удобный метод
Links:
[1] https://go-review.googlesource.com/c/go/+/207082/
В Go1.15 появится удобный метод
net/url.URL.Redacted
[1], по сути, похож на url.URL.String()
, только заменяет пароли на xxxxxxx
, будет удобно для логирования:package main
import (
"fmt"
"net/url"
)
func main() {
u := &url.URL{
Scheme: "https",
User: url.UserPassword("user", "password"),
Host: "example.com",
Path: "foo/bar",
}
fmt.Println(u.Redacted())
u.User = url.UserPassword("me", "newerPassword")
fmt.Println(u.Redacted())
}
// gotip run main.go
// https://user:[email protected]/foo/bar
// https://me:[email protected]/foo/bar
Links:
[1] https://go-review.googlesource.com/c/go/+/207082/
Note #65: новые темплейты в Go плайграунде!
* тесты
* поддержка нескольких файлов включая go.mod!
* можно напечатать картинку
https://play.golang.org
* тесты
* поддержка нескольких файлов включая go.mod!
* можно напечатать картинку
https://play.golang.org