문제 해결

Tier: Ultimate Offering: GitLab.com, Self-Managed, GitLab Dedicated

로그는 DAST가 인증 프로세스 중에 무엇을 수행하고 기대하는지에 대한 통찰을 제공합니다. 더 자세한 정보는 인증 보고서를 구성합니다.

특정 오류 메시지 또는 상황에 대한 자세한 내용은 알려진 문제를 참조하세요.

브라우저 기반 분석기는 사용자를 인증하는 데 사용됩니다. 고급 문제 해결에 대해서는 브라우저 기반 문제 해결을 참조하세요.

로그 읽기

DAST CI/CD 작업의 콘솔 출력은 AUTH 로그 모듈을 사용하여 인증 프로세스에 대한 정보를 보여줍니다. 예를 들어, 다음 로그는 다단계 로그인 양식에 대한 인증 실패를 보여줍니다. 로그인 이후에 홈페이지가 표시되어야 하는데, 대신 로그인 양식이 여전히 있는 상태로, 인증이 실패했습니다.

2022-11-16T13:43:02.000 INF AUTH  attempting to authenticate
2022-11-16T13:43:02.000 INF AUTH  loading login page LoginURL=https://example.com/login
2022-11-16T13:43:10.000 INF AUTH  multi-step authentication detected
2022-11-16T13:43:15.000 INF AUTH  verifying if user submit was successful true_when="HTTP status code < 400"
2022-11-16T13:43:15.000 INF AUTH  requirement is satisfied, no login HTTP message detected want="HTTP status code < 400"
2022-11-16T13:43:20.000 INF AUTH  verifying if login attempt was successful true_when="HTTP status code < 400 and has authentication token and no login form found (no element found when searching using selector css:[id=email] or css:[id=password] or css:[id=submit])"
2022-11-24T14:43:20.000 INF AUTH  requirement is satisfied, HTTP login request returned status code 200 url=https://example.com/user/login?error=invalid%20credentials want="HTTP status code < 400"
2022-11-16T13:43:21.000 INF AUTH  requirement is unsatisfied, login form was found want="no login form found (no element found when searching using selector css:[id=email] or css:[id=password] or css:[id=submit])"
2022-11-16T13:43:21.000 INF AUTH  login attempt failed error="authentication failed: failed to authenticate user"

인증 보고서 구성

caution
인증 보고서에는 로그인을 수행하는 데 사용된 자격 증명과 같은 민감한 정보가 포함될 수 있습니다.

인증 보고서는 인증 실패의 원인을 이해하는 데 도움이 되도록 CI/CD 작업 아티팩트로 저장할 수 있습니다.

보고서에는 로그인 프로세스 중에 수행된 단계, HTTP 요청 및 응답, 문서 객체 모델(DOM) 및 스크린샷이 포함됩니다.

dast-auth-report

인증 디버그 보고서가 내보내어지는 예제 구성은 다음과 같을 수 있습니다:

dast:
  variables:
    DAST_WEBSITE: "https://example.com"
    DAST_AUTH_REPORT: "true"
  artifacts:
    paths: [gl-dast-debug-auth-report.html]
    when: always

알려진 문제

로그인 양식을 찾을 수 없음

DAST가 로그인 페이지를 로드할 때 로그인 양식을 찾지 못하여 종종 실패합니다. 로그는 다음과 같은 심각한 오류를 보고합니다:

2022-12-07T12:44:02.838 INF AUTH  loading login page LoginURL=[authentication URL]
2022-12-07T12:44:11.119 FTL MAIN  authentication failed: login form not found

권장 조치:

  • 인증 보고서를 생성하여 HTTP 응답을 검사합니다.
  • 대상 애플리케이션의 인증이 배포되어 실행 중인지 확인합니다.
  • DAST_AUTH_URL이 올바른지 확인합니다.
  • GitLab Runner가 DAST_AUTH_URL에 액세스할 수 있는지 확인합니다.
  • 사용 중이라면 DAST_BROWSER_PATH_TO_LOGIN_FORM이 유효한지 확인합니다.

스캔이 인증된 페이지를 크롤하지 않음

DAST가 인증 프로세스 중에 잘못된 인증 토큰을 캡처하면 스캔이 인증된 페이지를 크롤할 수 없습니다. 쿠키 및 저장 인증 토큰의 이름이 로그에 기록됩니다. 예를 들면:

2022-11-24T14:42:31.492 INF AUTH  authentication token cookies names=["sessionID"]
2022-11-24T14:42:31.492 INF AUTH  authentication token storage events keys=["token"]

권장 조치:

  • 인증 보고서를 생성하고 Login submit의 스크린샷을 확인하여 로그인이 예상대로 작동하는지 확인합니다.
  • 기록된 인증 토큰이 애플리케이션에서 사용하는 토큰인지 확인합니다.
  • 쿠키를 사용하여 인증 토큰을 저장하는 경우, DAST_AUTH_COOKIES를 사용하여 인증 토큰 쿠키의 이름을 설정합니다.

셀렉터로 요소를 찾을 수 없음

DAST가 사용자 이름, 비밀번호, 첫 번째 제출 버튼 또는 제출 버튼 요소를 찾지 못했습니다. 로그는 다음과 같은 심각한 오류를 보고합니다:

2022-12-07T13:14:11.545 FTL MAIN  authentication failed: unable to find elements with selector: css:#username

권장 조치:

  • 인증 보고서를 생성하여 로그인 페이지의 스크린샷을 사용하여 페이지가 올바르게 로드되었는지 확인합니다.
  • 브라우저에서 로그인 페이지를로드하고 DAST_USERNAME_FIELD, DAST_PASSWORD_FIELD, DAST_FIRST_SUBMIT_FIELD, DAST_SUBMIT_FIELD에서 구성된 셀렉터가 올바른지 확인합니다.

사용자 인증 실패

DAST가 실패한 로그인 확인 검사로 인해 인증에 실패했습니다. 로그는 다음과 같은 심각한 오류를 보고합니다:

2022-12-07T06:39:49.483 INF AUTH  verifying if login attempt was successful true_when="HTTP status code < 400 and has authentication token and no login form found (no element found when searching using selector css:[name=username] or css:[name=password] or css:button[type=\"submit\"])"
2022-12-07T06:39:49.484 INF AUTH  requirement is satisfied, HTTP login request returned status code 303 url=http://auth-manual:8090/login want="HTTP status code < 400"
2022-12-07T06:39:49.513 INF AUTH  requirement is unsatisfied, login form was found want="no login form found (no element found when searching using selector css:[name=username] or css:[name=password] or css:button[type=\"submit\"])"
2022-12-07T06:39:49.589 INF AUTH  login attempt failed error="authentication failed: failed to authenticate user"
2022-12-07T06:39:53.626 FTL MAIN  authentication failed: failed to authenticate user

권장 조치:

  • requirement is unsatisfied에 대한 로그를 확인합니다. 적절한 오류에 대해 응답합니다.

요구 사항이 충족되지 않았으며 로그인 양식이 찾아짐

일반적으로 사용자가 로그인하고 로그인이 올바르지 않은 경우에는 대시 보드가 표시되고, 사용자 이름 또는 비밀번호가 올바르지 않을 때는 로그인 양식과 함께 오류 메시지가 표시됩니다.

DAST가 사용자 인증 이후에 페이지에 있는 로그인 양식을 감지하는 경우(로그인 시도가 실패했다는 것을 의미)에이 오류가 발생합니다.

2022-12-07T06:39:49.513 INF AUTH  requirement is unsatisfied, login form was found want="no login form found (no element found when searching using selector css:[name=username] or css:[name=password] or css:button[type=\"submit\"])"

권장 조치:

  • 사용된 사용자 이름 및 비밀번호/인증 자격 증명이 올바른지 확인합니다.
  • 인증 보고서를 생성하고 Login submitRequest를 확인합니다.
  • 사용자 인증 후에 표시되는 페이지에 로그인 양식 셀렉터와 일치하는 요소가 실제로 존재하는 경우, DAST_AUTH_VERIFICATION_URL 또는 DAST_AUTH_VERIFICATION_SELECTOR를 구성하여 로그인 시도를 확인하는 대체 방법을 사용합니다.
  • 일부 애플리케이션은 로그인 양식을 숨기기 전에 페이지에서 “로드 중…” 요소를 표시합니다. 이는 분석기를 혼란스럽게 할 수 있습니다. 페이지가 로드가 완료되었음을 분석기에 알려주기 위해 DAST_BROWSER_PAGE_LOADING_SELECTOR 또는 DAST_BROWSER_PAGE_READY_SELECTOR 변수를 사용합니다.

요구 사항 불만족, 셀렉터가 결과를 반환하지 않음

DAST는 사용자 로그인 후 표시된 페이지에서 DAST_AUTH_VERIFICATION_SELECTOR에 제공된 셀렉터와 일치하는 요소를 찾을 수 없습니다.

2022-12-07T06:39:33.239 INF AUTH  요구 사항이 불만족이며, 셀렉터를 사용하여 DOM을 검색한 결과가 없습니다: 원하는 것="요소가 있음 css:[name=welcome]"

제안된 조치:

  • 인증 보고서를 생성하고 로그인 제출에서 스크린샷을 확인하여 예상했던 페이지가 표시되는지 확인합니다.
  • DAST_AUTH_VERIFICATION_SELECTOR 셀렉터가 올바른지 확인하세요.

요구 사항 불만족, 브라우저가 URL에 있지 않음

DAST가 사용자 로그인 후 표시된 페이지의 URL이 DAST_AUTH_VERIFICATION_URL에 따라 예상과 다른 것을 감지했습니다.

2022-12-07T11:28:00.241 INF AUTH  요구 사항이 불만족이며, 브라우저가 URL에 있지 않습니다: 브라우저 URL="https://example.com/home" 원하는 것="url이 https://example.com/user/dashboard에 있음"

제안된 조치:

  • 인증 보고서를 생성하고 로그인 제출에서 스크린샷을 확인하여 예상했던 페이지가 표시되는지 확인합니다.
  • DAST_AUTH_VERIFICATION_URL이 올바른지 확인하세요.

요구 사항 불만족, HTTP 로그인 요청 상태 코드

로그인 양식을로드하거나 제출할 때의 HTTP 응답이 상태 코드 400 (클라이언트 오류) 또는 500 (서버 오류)를 갖고 있었습니다.

2022-12-07T06:39:53.626 INF AUTH  요구 사항이 불만족이며, HTTP 로그인 요청이 상태 코드 502를 반환했습니다: URL="https://example.com/user/login" 원하는 것="HTTP 상태 코드 < 400"
  • 사용된 사용자 이름 및 비밀번호/인증 자격 증명이 올바른지 확인하세요.
  • 로그인 제출에 대한 요청이 올바른지 인증 보고서를 생성하세요.
  • 대상 응용 프로그램이 예상대로 작동하는지 확인하세요.

요구 사항 불만족, 인증 토큰 없음

DAST는 인증 프로세스 중에 생성된 인증 토큰을 감지하지 못했습니다.

2022-12-07T11:25:29.010 INF AUTH  인증 토큰 쿠키 이름=[]
2022-12-07T11:25:29.010 INF AUTH  인증 토큰 저장 이벤트 키=[]
2022-12-07T11:25:29.010 INF AUTH  요구 사항이 불만족이며, 기본 인증, 쿠키 또는 저장 이벤트 인증 토큰이 감지되지 않았습니다: 원하는 것="인증 토큰이 있음"

제안된 조치:

  • 인증 보고서를 생성하고 로그인 제출에서 스크린샷을 확인하여 로그인이 예상대로 작동하는지 확인하세요.
  • 브라우저의 개발 도구를 사용하여 로그인하는 동안 생성된 쿠키 및 로컬/세션 스토리지 객체를 조사하세요. 충분히 무작위 값으로 생성된 인증 토큰이 있는지 확인하세요.
  • 인증 토큰을 저장하는 데 쿠키를 사용하는 경우, DAST_AUTH_COOKIES를 사용하여 인증 토큰 쿠키의 이름을 설정하세요.