Go dependency(go.mod) 추적하기
제가 최근에 Dependabot alerts 에 확인된 취약점 중 패키지 확인이 안되는 취약점이 있었습니다. 특히 직접 사용하는 패키지에서 이슈가 있으면 dependabot이 Pull Request를 보내게 되어 있는데 그마저도 없어서 원인을 찾아보고자 go.mod에서 원인이 되는 패키지를 찾아보기 시작했고 그 과정에서...
제가 최근에 Dependabot alerts 에 확인된 취약점 중 패키지 확인이 안되는 취약점이 있었습니다. 특히 직접 사용하는 패키지에서 이슈가 있으면 dependabot이 Pull Request를 보내게 되어 있는데 그마저도 없어서 원인을 찾아보고자 go.mod에서 원인이 되는 패키지를 찾아보기 시작했고 그 과정에서...
테스트 코드 작성 중 우리가 예측 가능한 함수 인자 값은 쉽게 체크가 가능하지만, 시스템으로 부터 넘어오는 데이터는 막상 작성하려고 하면 어떻게 해야할지 고민이 되기 시작합니다. 오늘은 그 중 하나인 Stdin에 대한 테스트 코드 작성 이야기를 하려고 합니다. Pipe trick Stdin은 테스트 코드상에서 os.Pip...
Logrus는 golang의 아주 좋은 logger 패키지입니다. logrus는 hook을 이용해서 지정된 한번에 여러곳에 로그를 남길 수 있습니다. built-in hook으로는 현재 syslog와 io.Writer가 있고 저는 channel로 hook을 쓸 일이 있어 간단하게 작성하여 공유해봅니다 :D type Hook...
고루틴과 채널은 golang에서 가장 핵심적인 기능 중 하나입니다. 다만 꼼꼼하게 체크하고 사용하지 않으면 여러가지 문제들을 만들어낼 수 있습니다. 그 중 하나는 Close된 채널에 값을 전달하는 상황인데요. 이런 경우 Application은 panic으로 종료하게 됩니다. panic: send on closed chan...
최근 dalfox에 독특한 이슈가 제보됬는데(오프라인으로도 한번 제보받은 사항이라 이미 삽질을 좀 헀던 상태였네요) 오늘 이를 해결하고 어떻게 해결했는지 간략하게 공유할까 합니다. 특별한 내용은 아니지만, golang에서 http 기반 개발을 진행할 때 알고 있으면 실수를 예방할 수 있는 부분이죠. 먼저 간략히 이슈에 대해...
golang으로 개발된 앱은 pkg.go.dev에 저장되며 해당 사이트를 통해 패키지 정보를 볼 수 있고 실제 go get 으로 패키지를 가져올 때 이곳의 latest 버전을 가져오게 됩니다. 그래서 이 사실을 잘 몰랐던 과거의 저는 이런 실수도 했었던 기억이 나네요. 다만 github에 go 패키지를 배포 하더라도 pkg...
최근에 시덥지 않은 문제로 구글링하다가 단순하게 해결한 일이 있어서 짧게 글로 공유 해볼까 합니다. 복잡한 문제로 생각해서 오히려 가까이에 있는 답을 놓치고 말았었네요. 어떤 문제가? 만들던 서비스에서 큰 JSON 파일을 처리해야할 경우가 생겼습니다. json.Unmarshal 후 루프를 돌아서 모든 키 값에 대한 처리를...
오늘은 golang에서 http.Request를 Raw HTTP Request (string) 형태로 치환하는 방법에 대해 메모하려고 합니다. http.Request and http.Response http.Request 그리고 http.Response는 golang의 기본 http 패키지에서 제공하는 struct로 HTT...
go1.17 버전부터 go get을 이용한 executable app, 즉 바이너리 설치가 deprecated 되었습니다 🧐 저는 go get을 통한 app install이 deprecated 된지 모르고 있었는데, 다른 도구 테스트하다고 go get으로 설치하다 보니 아래와 같은 메시지가 나타나서 알게됬습니다. go g...
goreleaser의 각각 v0.157.0, v0.175.0 버전에서 M1 macbook, Windows ARM 64 지원이 추가되었습니다. 저도 제가 개발하는 도구에선 M1 지원이 약간 늦은 느낌이 있긴한데요. 관련해서 주의해야할 점들 정리해 둡니다. Apple M1 Apple M1은 darwin/arm64로 표기됩니다...
Go 하면 어떤 특징이 떠오르시나요? 구글의 언어, 빠르다 등 전반적인 개념에서 goroutine, 채널 등 디테일한 부분까지 많은 것들이 있을텐데요, 저는 제가 처음 고를 접했을 때 가장 재미있게 봤던 것이 goroutine과 채널이였습니다. 오늘은 goroutine과 이를 잘 보조해주는 sync 패키지에 대한 이야기를 ...
Null은 일반적으로 존재하지 않는 값 또는 메모리 주소를 의미하며 언어에 따라 null nil nan none undefined 등 여러가지 형태로 표현됩니다. 다만 null이란 개념이 언어마다 특성과 철학, 표현하는 방식에 따라서 달라지기도 하는데요. 오늘은 golang에서의 null인 nil의 특성 하나를 살펴보려고 합...
Go supports only 25 keywords. It’s very simple, which has the advantage of a low learning curve. I’ve never posting it while using Go. Let me summarize the meaning of each keyword to...
최근에 golang으로 개발한 도구 중 jwt 라이브러리를 사용한 대다수의 프로젝트에서 아래와 같이 Security dependency alert이 나타났습니다. 지난주중에 모두 수정했지만 겸사겸사 알고 있으면 좋은 내용이 있어서 글로 남겨둡니다. CVE-2020-26160 사실 위 alert은 CVE-2020-261...
저는 테스트 코드를 많이 작성하진 않습니다. 아무래도 본업이 보안 엔지니어링이다 보니 현업 개발자처럼 꼼꼼하게 테스트 코드를 작성하고 조금 더 나아가 TDD(Test-Driven Development)를 신경쓰면서 개발할 수 있는 여유가 있는 것도 아니구요. 다만 그래도.. 올해부터 조금 더 신경쓰고 적용해보려고 노력중이였...
go get go 기반 어플리케이션들을 사용해보셨거나 go 언어로 개발을 한다면 go get 은 매우 익숙한 명령이라고 생각합니다. 이는 github 등 원격 repo에서 패키지를 다운로드 받는 명령이고, pkg.go.dev에서 보이는 데이터를 기준으로 go package에 대한 정보와 코드 데이터를 받아오게 됩니다. (그...
최근에 머신러닝 공부를 하고 있습니다. 물론 뭐 깊게 공부하기에는 제 주력인 보안과 도메인도 워낙 다르고, 개발적인 테크닉 이외에도 수학/통계학적인 부분이 많이 필요하기 때문에 잘 할 수 있을거란 확신은 들지 않네요. 그래서 전공 수준으론 하지 못해도 얕게라도 공부해서 개인적으로나 회사적으로나 사용해볼만한 포인트를 만드는게...
My Problem 간혹 go get 으로 제가 만든 도구를 설치 시 구버전(현재는 2버전대인데, 1버전대가..)이 설치되는 이슈가 있었습니다. 또한 pkg.go.dev에도 구버전이 마지막 릴리즈로 있고 변화가 없던 상태였죠. 별일 아니겠거니 하고 방치하다가 최근에 discussions 통해서 물어봤고, 의미있는 해답을...
golang에서 cli 도구를 만들 때 가장 먼저 접하는 도구는 flag입니다. 저 또한 flag로 시작하여 cobra, unfave 등 여러가지 써보다가 결국은 잘 사용하던 cobra를 버리고 flag로 다시 돌아왔습니다. go의 내장형 option parser로 심플하지만, 편의성을 위한 부분들은 많이 적어서 때때로, 직...
메모 차원에서 작성합니다. dalfox 1.1 버전대 업데이트에서 큰 부분 중 하나가 self-update입니다. 이전에 xspear, a2sv 등에서도 여러가지 방법으로 self-update를 지원했었는데 이번 dalfox는 바이너리로 컴파일되서 배포되기 때문에 고민이 좀 많았습니다. (이전까진 git command 기반...
에러의 내용을 요약하면 아래와 같습니다. renegoriation 미설정으로 인한 발생이네요. local error: tls: no renegotiation dalfox 릴리즈 후 처음으로 이슈올라온 내용입니다. 다른 언어에서는 기본적으로 설정되어 있어서, 크게 신경쓰지 않았었는데, go의 경우 기본으로 포함되지 ...
Metaploit에서 2018년 12월부터 golang module 지원이 시작되었습니다. 저도 잘 모르고 있다가 최근에서야 알게 되었네요. Contributing modules in GO can be achieved in a few simple steps as outlined below. As for supporte...
TL;DR One-line script cd ~/.vim ; mkdir autoload ; mkdir bundle ;cd autoload \ curl -LSso pathogen.vim https://tpo.pe/pathogen.vim ; \ cd ~/.vim/bundle ; git clone https://github.co...
SubFinder 설치 중 undefined: os.UserHomeDir , undefined: strings.ReplaceAll 에러가 발생해서 해결 방법 정리해둡니다. 아마.. 현재 일부 피씨에서 설치 시 위와 같은 에러가 발생할텐데요, 원인은 golang 의 버전 문제입니다. subfinder가 최근에 go 1.13 ...
Ruby에서 golang으로 주력 언어를 바꿔가는 중입니다. 이 과정에서 가장 문제가 되는 부분이 웹앱이였습니다. 이미 Rails에 익숙해진터라 대안이 될만한 여러 프레임워크를 찾아봤고, 2가지 생각이 나왔습니다. revel을 통한 개발(MVC) 기본으로 제공되는 net/http와 VueJS 조합 go에 MVC...
요즘 공부도할겸 golang 으로 끄적끄적 만들어보고 있는게 있습니다. 그 중 일부는 웹 환경으로 구성하고 heroku에 띄울 생각인데, 루비처럼 사전에 세팅이 필요한 부분들이 있어서 내용 정리해둡니다. Pre-setting 우선, GoLand 같은 IDE를 쓰더라도 빌드 로그 떄문에 커밋까지만 IDE에서 하는게 개인적으론...
매번 느끼지만 글로 작성하지 않은 내용들은 나중에 다시 세팅하거나, 참고해야할 때 참 불편합니다. 꼭 필요할 때 보면 없다죠. 최근에도 vim 세팅을 다시 할일이 있어 하나하나 세팅하고 있는데, 한번쯤은 메모해두면 두고두고 볼 것 같다라는 생각이 들었습니다. 짧게나마 시간 내어서 글 작성해봅니다. plugin 관리자 apt...
요즘 Go langage를 배워볼까 합니다. 그래서 아주 천천히 틈날때마다 보고있는데, 조금씩은 정리해서 포스팅해볼까 합니다. 아마 익숙해지면 Ruby와 섞어서 코딩하게 될 것 같네요. 문법에 대한 설명은 패스하고 Go만의 특이한 부분들 위주로 글 작성해보죠. 그럼 시작합니다. What is Go lang? 2009년 1...