InfoGrab Docs

보안 코딩 개발 가이드라인

보안 코딩 개발 가이드라인에 대해 설명합니다.

이 문서는 GitLab 코드베이스에서 일반적으로 필요한 안전한 Go 프로그래밍 관행에 대한 설명과 가이드라인을 포함합니다. 이 가이드라인은 개발자가 처음부터 안전한 Go 코드를 작성하고, 개발 초기 단계에서 잠재적인 보안 취약점을 식별하며, Go 특유의 모범 사례를 따를 수 있도록 돕기 위한 것입니다. 이러한 표준을 준수함으로써 시간이 지남에 따라 출시되는 보안 취약점의 수를 줄이면서 Go의 내장 보안 기능을 효과적으로 활용하고자 합니다. 정규 표현식 가이드라인 # Go의 이스케이프 시퀀스 # 문자열 리터럴 또는 정규 표현식 리터럴의 문자 앞에 백슬래시가 오면 이스케이프 시퀀스의 일부로 해석됩니다. 예를 들어, 문자열 리터럴의 이스케이프 시퀀스 \n 은 \ 와 n 문자가 아닌 단일 newline 문자에 해당합니다. 놀라운 결과를 초래할 수 있는 두 가지 Go 이스케이프 시퀀스가 있습니다. 첫째, regexp.Compile("\a") 는 벨 문자와 일치하는 반면, regexp.Compile("\\A") 는 텍스트의 시작과 일치하고 regexp.Compile("\\a") 는 Go가 아닌 Vim 정규 표현식으로 영문자와 일치합니다. 둘째, regexp.Compile("\b") 는 백스페이스와 일치하는 반면, regexp.Compile("\\b") 는 단어의 시작과 일치합니다. 이 둘을 혼동하면 예상보다 정규 표현식이 훨씬 더 자주 또는 드물게 통과하거나 실패할 수 있어, 잠재적인 보안 결과를 초래할 수 있습니다. 예시 # 다음 예시 코드는 입력 문자열에서 금지된 단어를 확인하는 데 실패합니다: package main import "regexp" func broken (hostNames [] byte ) string { var hostRe = regexp.MustCompile( "\bforbidden.host.org" ) if hostRe.Match(hostNames) { return "Must not target forbidden.host.org" } else { // This will be reached even if hostNames is exactly "forbidden.host.org", // because the literal backspace is not matched return "" } } 완화 방법 # 위의 검사는 작동하지 않지만 백슬래시를 이스케이프하여 수정할 수 있습니다: package main import "regexp" func fixed (hostNames [] byte ) string { var hostRe = regexp.MustCompile( `\bforbidden.host.org` ) if hostRe.Match(hostNames) { return "Must not target forbidden.host.org" } else { // hostNames definitely doesn't contain a word "forbidden.host.org", as "\\b" // is the start-of-word a