문제 해결

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

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

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

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

로그 읽기

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

2022-11-16T13:43:02.000 INF AUTH  인증 시도 중
2022-11-16T13:43:02.000 INF AUTH  로그인 페이지 로드중 LoginURL=https://example.com/login
2022-11-16T13:43:10.000 INF AUTH  다단계 인증 감지됨
2022-11-16T13:43:15.000 INF AUTH  사용자 제출이 성공했는지 확인 중 true_when="HTTP 상태 코드 < 400"
2022-11-16T13:43:15.000 INF AUTH  요구사항 충족, 로그인 HTTP 메시지 감지되지 않음 want="HTTP 상태 코드 < 400"
2022-11-16T13:43:20.000 INF AUTH  로그인 시도가 성공했는지 확인 중 true_when="HTTP 상태 코드 < 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  요구사항 충족, HTTP 로그인 요청이 상태 코드 200을 반환함 url=https://example.com/user/login?error=invalid%20credentials want="HTTP 상태 코드 < 400"
2022-11-16T13:43:21.000 INF AUTH  요구사항 충족하지 않음, 로그인 양식이 발견됨 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  로그인 시도 실패 error="인증 실패: 사용자 인증에 실패했습니다"

인증 보고서 구성

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

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

보고서에는 로그인 프로세스 중 수행된 단계, 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는 로그인 페이지를 로드할 때 로그인 양식을 찾지 못했습니다. 이는 인증 URL을 로드할 수 없었기 때문인 경우가 많습니다. 로그에서는 다음과 같은 치명적인 오류가 보고됩니다:

2022-12-07T12:44:02.838 INF AUTH  로그인 페이지 로딩중 LoginURL=[인증 URL]
2022-12-07T12:44:11.119 FTL MAIN  인증 실패: 로그인 양식을 찾을 수 없음

제안하는 조치:

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

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

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

2022-11-24T14:42:31.492 INF AUTH  인증 토큰 쿠키 이름=["sessionID"]
2022-11-24T14:42:31.492 INF AUTH  인증 토큰 저장 이벤트 키=["token"]

제안하는 조치:

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

선택자로 요소를 찾을 수 없음

DAST가 사용자 이름, 비밀번호, 첫 번째 제출 버튼 또는 제출 버튼 요소를 찾지 못했습니다. 로그에서는 다음과 같은 치명적인 오류가 보고됩니다:

2022-12-07T13:14:11.545 FTL MAIN  인증 실패: 선택자로 요소를 찾을 수 없음: css:#username

제안하는 조치:

  • 인증 보고서를 생성하여 로그인 페이지에서 페이지가 올바르게 로드되었는지 스크린샷을 사용하여 확인합니다.
  • 브라우저에서 로그인 페이지를 로드하고 DAST_AUTH_USERNAME_FIELD, DAST_AUTH_PASSWORD_FIELD, DAST_AUTH_FIRST_SUBMIT_FIELD, DAST_AUTH_SUBMIT_FIELD에 구성된 선택기가 올바른지 확인합니다.

사용자 인증 실패

DAST가 실패한 로그인 확인 검사로 인해 인증에 실패했습니다. 로그에서 다음과 같은 치명적인 오류가 보고됩니다:

2022-12-07T06:39:49.483 INF AUTH  로그인 시도가 성공했는지 확인 중 true_when="HTTP 상태 코드 < 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  요구사항 충족, HTTP 로그인 요청이 상태 코드 303을 반환함 url=http://auth-manual:8090/login want="HTTP 상태 코드 < 400"
2022-12-07T06:39:49.513 INF AUTH  요구사항 충족하지 않음, 로그인 양식이 발견됨 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  로그인 시도 실패 error="인증 실패: 사용자 인증에 실패했습니다"
2022-12-07T06:39:53.626 FTL MAIN  인증 실패: 사용자 인증에 실패했습니다

제안하는 조치:

  • 로그에서 요구사항 충족하지 않음을 찾아 해당 오류에 대응합니다.
2022-12-07T06:39:49.513 INF AUTH  필요조건이 충족되지 않았습니다. 로그인 양식이 발견되었습니다 want="css:[name=username] 또는 css:[name=password] 또는 css:button[type=\"submit\"]로 검색할 때 요소를 찾을 수 없음"

제안된 동작:

  • 사용자 이름과 암호/인증 자격 증명이 정확한지 확인하세요.
  • 인증 보고서를 생성하고 Login submitRequest가 올바른지 확인하세요.
  • 웹소켓 또는 AJAX를 사용하여 로그인 양식을 제출할 때 발생하는 요청과 응답이 비어 있는 경우. 이는 페이지를 완전히 다시로드하는 요청이 없을 때 발생합니다.
  • 사용자 인증 후 표시된 페이지에 로그인 양식 선택기와 일치하는 요소가 실제로 있는 경우 DAST_AUTH_SUCCESS_IF_AT_URL 또는 DAST_AUTH_SUCCESS_IF_ELEMENT_FOUND를 구성하여 로그인 시도를 확인할 다른 방법을 사용합니다.
  • 일부 응용프로그램은 로그인 양식을 숨기기 전에 페이지에 “로드 중…” 요소를 표시합니다. 이는 분석 도구를 혼동시킬 수 있습니다. 페이지 로드가 완료되었다는 분석 도구에 지시하려면 DAST_PAGE_IS_LOADING_ELEMENT 또는 DAST_PAGE_IS_READY_ELEMENT 변수를 사용합니다.

2022-12-07T06:39:33.239 INF AUTH  필요조건이 충족되지 않았습니다. 선택기가 반환한 DOM의 요소를 찾을 수 없음 want="css:[name=welcome]"

제안된 동작:

  • 인증 보고서를 생성하고 Login submit에서 스크린샷을 확인하여 예상한 페이지가 표시되는지 확인하세요.
  • DAST_AUTH_SUCCESS_IF_ELEMENT_FOUND 선택기가 올바른지 확인하세요.

2022-12-07T11:28:00.241 INF AUTH  필요조건이 충족되지 않았습니다. 사용자 로그인 후 표시된 페이지의 URL이 `DAST_AUTH_SUCCESS_IF_AT_URL`에 따라 기대하는 URL과 다름을 감지했습니다.

제안된 동작:

  • 인증 보고서를 생성하고 Login submit에서 스크린샷을 확인하여 예상한 페이지가 표시되는지 확인하세요.
  • DAST_AUTH_SUCCESS_IF_AT_URL이 올바른지 확인하세요.

2022-12-07T06:39:53.626 INF AUTH  필요조건이 충족되지 않았습니다. 로그인 양식 또는 폼 제출 시 HTTP 응답이 상태 코드 400(클라이언트 오류) 또는 500(서버 오류)를 반환했습니다.

제안된 동작:

  • 사용자 이름과 암호/인증 자격 증명이 정확한지 확인하세요.
  • 인증 보고서를 생성하고 Login submitRequest가 올바른지 확인하세요.
  • 대상 응용프로그램이 예상한 대로 작동하는지 확인하세요.

2022-12-07T11:25:29.010 INF AUTH  인증 토큰 쿠키가 감지되지 않았습니다
2022-12-07T11:25:29.010 INF AUTH  인증 토큰 저장 이벤트 키가 감지되지 않았습니다
2022-12-07T11:25:29.010 INF AUTH  필요조건이 충족되지 않았습니다, 인증 토큰이 없습니다 want="인증 토큰이 있어야 함"

제안된 동작:

  • 인증 보고서를 생성하고 Login submit에서 스크린샷을 확인하여 로그인이 예상대로 작동하는지 확인하세요.
  • 브라우저의 개발자 도구를 사용하여 로그인 중에 생성된 쿠키 및 로컬/세션 저장 객체를 조사합니다. 충분히 무작위 값으로 만들어진 인증 토큰이 있는지 확인하세요.
  • 인증 토큰을 저장하기 위해 쿠키를 사용하는 경우 DAST_AUTH_COOKIE_NAMES를 사용하여 인증 토큰 쿠키의 이름을 설정하세요. ```