설명
사용자 입력을 개행 문자 중립화 없이 로그에 기록하면 공격자가 가짜 로그 라인을 삽입하거나 로그 분석을 혼동시킬 수 있습니다.
잠재적 영향
- 침해 사고 분석과 탐지가 어려워질 수 있습니다.
- HTML 로그 뷰어가 입력을 HTML로 해석하면 후속 XSS 위험으로 이어질 수 있습니다.
해결 방법
- 로그 기록 전
\r,\n을 제거하거나 로그 형식에 맞게 인코딩하세요. - 사용자 입력 원문 대신 정규화된 값이나 식별자를 기록하세요.
예시
변경 전
go
user := r.FormValue("user")
log.Printf("user=%s", user)
변경 후
go
user := strings.ReplaceAll(r.FormValue("user"), "\n", "")
user = strings.ReplaceAll(user, "\r", "")
log.Printf("user=%s", user)
설명:
- 변경 전: 사용자 입력을 개행 문자나 HTML 중립화 없이 로그에 기록하면 공격자가 가짜 로그 라인을 삽입하거나 로그 뷰어를 혼동시킬 수 있습니다.
- 변경 후: 예시는
\r,\n을 제거해 줄 단위 위조를 줄입니다. HTML 인코딩은 수행하지 않으므로 웹 로그 뷰어의 출력 컨텍스트에 맞는 별도 처리가 필요합니다.