분석기 활성화

스캔할 API를 지정하려면 다음을 사용하세요:

OpenAPI 사양

OpenAPI 사양 (구 Swagger 사양)은 REST API에 대한 API 설명 형식입니다.

이 섹션에서는 테스트할 대상 API에 대한 정보를 제공하기 위해 OpenAPI 사양을 사용하여 API 보안 테스트 스캔을 구성하는 방법을 보여줍니다.

OpenAPI 사양은 파일 시스템 리소스 또는 URL로 제공됩니다. JSON 및 YAML OpenAPI 형식이 모두 지원됩니다.

API 보안 테스트는 OpenAPI 문서를 사용하여 요청 본체를 생성합니다. 요청 본체가 필요한 경우, 본체 생성은 다음 본체 유형으로 제한됩니다:

  • application/x-www-form-urlencoded
  • multipart/form-data
  • application/json
  • application/xml

OpenAPI 및 미디어 유형

미디어 유형(구 MIME 유형)은 전송된 파일 형식 및 형식 내용의 식별자입니다. OpenAPI 문서를 사용하면 주어진 작업이 다른 미디어 유형을 수용할 수 있도록 지정할 수 있습니다. 따라서 주어진 요청은 서로 다른 파일 내용을 사용하여 데이터를 보낼 수 있습니다. 예를 들어, 사용자 데이터를 업데이트하기 위한 PUT /user 작업은 XML(미디어 유형 application/xml) 또는 JSON(미디어 유형 application/json) 형식으로 데이터를 수용할 수 있습니다.

OpenAPI 2.x에서는 수용할 미디어 유형을 전역 또는 작업별로 지정할 수 있으며, OpenAPI 3.x에서는 작업별로 수용할 미디어 유형을 지정할 수 있습니다. API 보안 테스트는 나열된 미디어 유형을 확인하고 각 지원 미디어 유형에 대한 샘플 데이터를 생성하려고 시도합니다.

  • 기본 동작은 사용하기 위해 지원되는 미디어 유형 중 하나를 선택하는 것입니다. 목록에서 첫 번째 지원 미디어 유형이 선택됩니다. 이 동작은 구성할 수 있습니다.

같은 작업(POST /user와 같은)을 사용하여 서로 다른 미디어 유형(application/jsonapplication/xml과 같은)으로 테스트하는 것은 항상 바람직하지 않습니다. 예를 들어, 대상 애플리케이션이 요청 콘텐츠 유형에 관계없이 동일한 코드를 실행하는 경우, 테스트 세션이 완료되는 데 더 오랜 시간이 걸리며, 대상 애플리케이션에 따라 요청 본체와 관련된 중복 취약점을 보고할 수 있습니다.

환경 변수 APISEC_OPENAPI_ALL_MEDIA_TYPES를 사용하면 특정 작업을 위한 요청을 생성할 때 하나 대신 모든 지원 미디어 유형을 사용할지 여부를 지정할 수 있습니다. 환경 변수 APISEC_OPENAPI_ALL_MEDIA_TYPES가 어떤 값으로 설정되면, API 보안 테스트는 특정 작업에 대해 모든 지원 미디어 유형의 요청을 생성하려고 시도합니다. 이로 인해 각 제공된 미디어 유형에 대해 테스트가 반복되므로 테스트 시간이 길어집니다.

대안으로, 변수 APISEC_OPENAPI_MEDIA_TYPES를 사용하여 각각 테스트할 미디어 유형의 목록을 제공합니다. 둘 이상의 미디어 유형을 제공하면, 선택된 각 미디어 유형에 대해 테스트가 수행되므로 시간이 더 걸립니다. 환경 변수 APISEC_OPENAPI_MEDIA_TYPES가 미디어 유형 목록으로 설정되면, 요청을 생성할 때 나열된 미디어 유형만 포함됩니다.

APISEC_OPENAPI_MEDIA_TYPES의 여러 미디어 유형은 콜론(:)으로 구분됩니다. 예를 들어, 요청 생성을 application/x-www-form-urlencodedmultipart/form-data 미디어 유형으로 제한하려면, 환경 변수를 APISEC_OPENAPI_MEDIA_TYPESapplication/x-www-form-urlencoded:multipart/form-data로 설정하세요. 이 목록에 포함된 지원 미디어 유형만 요청 생성 시 포함되며, 비지원 미디어 유형은 항상 생략됩니다. 미디어 유형 텍스트는 서로 다른 섹션을 포함할 수 있습니다. 예를 들어, application/vnd.api+json; charset=UTF-8type "/" [tree "."] subtype ["+" suffix]* [";" parameter]의 조합입니다. 요청 생성 시 미디어 유형 필터링을 수행할 때 매개변수는 고려되지 않습니다.

환경 변수 APISEC_OPENAPI_ALL_MEDIA_TYPESAPISEC_OPENAPI_MEDIA_TYPES는 미디어 유형 처리 방식을 결정하는 데 사용됩니다. 이러한 설정은 상호 배타적입니다. 둘 다 활성화되면 API 보안 테스트가 오류를 보고합니다.

OpenAPI 사양으로 API 보안 테스트 구성하기

OpenAPI 사양으로 API 보안 테스트 스캐닝을 구성하려면:

  1. .gitlab-ci.yml 파일에 API-Security.gitlab-ci.yml 템플릿을 포함하세요.

  2. 구성 파일에는 다양한 체크가 활성화된 여러 테스트 프로필이 정의되어 있습니다. Quick 프로필로 시작하는 것을 권장합니다. 이 프로필로 테스트하면 더 빠르게 완료되며, 구성 유효성 검증이 더 쉬워집니다. 프로필을 제공하려면 .gitlab-ci.yml 파일에 APISEC_PROFILE CI/CD 변수를 추가하세요.

  3. OpenAPI 사양의 위치를 파일 또는 URL로 제공하세요. 위치를 지정하려면 APISEC_OPENAPI 변수를 추가하세요.

  4. 대상 API 인스턴스의 기본 URL도 필요합니다. APISEC_TARGET_URL 변수를 사용하거나 environment_url.txt 파일을 사용하여 제공하세요.

    프로젝트의 루트에 environment_url.txt 파일에 URL을 추가하는 것이 동적 환경에서 테스트하기에 좋습니다. GitLab CI/CD 파이프라인 중에 동적으로 생성된 앱에 대해 API 보안 테스트를 실행하려면, 앱이 자신의 URL을 environment_url.txt 파일에 지속적으로 유지하도록 하세요. API 보안 테스트는 이 파일을 자동으로 구문 분석하여 스캔 대상을 찾습니다. Auto DevOps CI YAML의 예를 참조하세요.

OpenAPI 사양 사용의 전체 예제 구성:

stages:
  - dast

include:
  - template: API-Security.gitlab-ci.yml

variables:
  APISEC_PROFILE: Quick
  APISEC_OPENAPI: test-api-specification.json
  APISEC_TARGET_URL: http://test-deployment/

이것은 API 보안 테스트를 위한 최소한의 구성입니다. 여기에서:

HTTP 아카이브 (HAR)

HTTP 아카이브 포맷 (HAR)은 HTTP 트랜잭션을 기록하기 위한 아카이브 파일 포맷입니다. GitLab API 보안 테스트 스캐너와 함께 사용할 때, HAR 파일은 테스트할 웹 API 호출의 기록을 포함해야 합니다. API 보안 테스트 스캐너는 모든 요청을 추출하여 테스트를 수행하는 데 사용합니다.

다양한 도구를 사용하여 HAR 파일을 생성할 수 있습니다:

경고: HAR 파일에는 인증 토큰, API 키 및 세션 쿠키와 같은 민감한 정보가 포함될 수 있습니다. 이를 저장소에 추가하기 전에 HAR 파일 내용을 검토하는 것을 권장합니다.

HAR 파일을 사용하는 API 보안 테스트 스캐닝

테스트할 대상을 제공하는 HAR 파일을 사용하여 API 보안 테스트를 구성하려면:

  1. .gitlab-ci.yml 파일에 API-Security.gitlab-ci.yml 템플릿을 포함하세요.

  2. 구성 파일에는 다양한 체크가 활성화된 여러 테스트 프로필이 정의되어 있습니다. Quick 프로필로 시작하는 것을 권장합니다. 이 프로필로 테스트하면 더 빠르게 완료되며, 구성 유효성 검증이 더 쉬워집니다. 프로필을 제공하려면 .gitlab-ci.yml 파일에 APISEC_PROFILE CI/CD 변수를 추가하세요.

  3. HAR 파일의 위치를 제공하세요. 위치를 파일 경로 또는 URL로 제공할 수 있습니다. 위치를 지정하려면 APISEC_HAR 변수를 추가하세요.

  4. 대상 API 인스턴스의 기본 URL도 필요합니다. APISEC_TARGET_URL 변수를 사용하거나 environment_url.txt 파일을 사용하여 제공하세요.

    프로젝트의 루트에 environment_url.txt 파일에 URL을 추가하는 것이 동적 환경에서 테스트하기에 좋습니다. GitLab CI/CD 파이프라인 중에 동적으로 생성된 앱에 대해 API 보안 테스트를 실행하려면, 앱이 자신의 URL을 environment_url.txt 파일에 지속적으로 유지하도록 하세요. API 보안 테스트는 이 파일을 자동으로 구문 분석하여 스캔 대상을 찾습니다. Auto DevOps CI YAML의 예를 참조하세요.

HAR 파일 사용의 전체 예제 구성:

stages:
  - dast

include:
  - template: API-Security.gitlab-ci.yml

variables:
  APISEC_PROFILE: Quick
  APISEC_HAR: test-api-recording.har
  APISEC_TARGET_URL: http://test-deployment/

이 예제는 API 보안 테스트를 위한 최소한의 구성입니다. 여기에서:

GraphQL 스키마

GraphQL은 API를 위한 쿼리 언어이며, REST API의 대안입니다.

API 보안 테스트는 여러 가지 방법으로 GraphQL 엔드포인트를 테스트할 수 있습니다:

  • GraphQL 스키마를 사용하여 테스트합니다. GitLab 15.4에서 도입되었습니다.
  • GraphQL 쿼리의 기록(HAR)을 사용하여 테스트합니다.
  • GraphQL 쿼리를 포함하는 Postman 수집을 사용하여 테스트합니다.

이 섹션에서는 GraphQL 스키마를 사용하여 테스트하는 방법을 문서화합니다. API 보안 테스트에서 GraphQL 스키마 지원은 인트로스펙션을 지원하는 엔드포인트에서 스키마를 쿼리할 수 있습니다.

인트로스펙션은 GraphiQL과 같은 툴이 작동할 수 있도록 기본적으로 활성화되어 있습니다.

인트로스펙션을 활성화하는 방법에 대한 자세한 내용은 귀하의 GraphQL 프레임워크 문서를 참조하십시오.

GraphQL 엔드포인트 URL로 API 보안 테스트 스캔

API 보안 테스트의 GraphQL 지원은 스키마를 위해 GraphQL 엔드포인트를 쿼리할 수 있습니다.

note
GraphQL 엔드포인트는 이 방법이 올바르게 작동하기 위해 인트로스펙션 쿼리를 지원해야 합니다.

API 보안 테스트를 구성하여 테스트할 대상 API에 대한 정보를 제공하는 GraphQL 엔드포인트 URL을 사용하려면:

  1. 포함
    귀하의 .gitlab-ci.yml 파일에 API-Security.gitlab-ci.yml 템플릿을 추가합니다.

  2. GraphQL 엔드포인트 경로를 제공합니다. 예: /api/graphql. APISEC_GRAPHQL 변수를 추가하여 위치를 지정합니다.

  3. 대상 API 인스턴스의 기본 URL도 필요합니다. 이를 APISEC_TARGET_URL 변수를 사용하거나 environment_url.txt 파일을 사용하여 제공합니다.

    프로젝트의 루트에 environment_url.txt 파일에 URL을 추가하는 것은 동적 환경에서 테스트하는 데 매우 좋습니다. 더 많은 정보는 우리의 문서의 동적 환경 솔루션 섹션을 참조하세요.

GraphQL 엔드포인트 경로를 사용하는 완전한 구성 예:

stages:
  - dast

include:
  - template: API-Security.gitlab-ci.yml

api_security:
  variables:
    APISEC_GRAPHQL: /api/graphql
    APISEC_TARGET_URL: http://test-deployment/

이 예는 API 보안 테스트를 위한 최소 구성입니다. 여기서 다음을 수행할 수 있습니다:

GraphQL 스키마 파일로 API 보안 테스트 스캔

API 보안 테스트는 인트로스펙션이 비활성화된 GraphQL 엔드포인트를 이해하고 테스트하기 위해 GraphQL 스키마 파일을 사용할 수 있습니다. GraphQL 스키마 파일은 인트로스펙션 JSON 형식이어야 합니다. GraphQL 스키마는 온라인 서드 파티 도구를 사용하여 인트로스펙션 JSON 형식으로 변환할 수 있습니다: https://transform.tools/graphql-to-introspection-json.

테스트할 대상 API에 대한 정보를 제공하는 GraphQL 스키마 파일을 사용하도록 API 보안 테스트를 구성하려면:

  1. 포함
    귀하의 .gitlab-ci.yml 파일에 API-Security.gitlab-ci.yml 템플릿을 추가합니다.

  2. GraphQL 엔드포인트 경로를 제공합니다. 예: /api/graphql. APISEC_GRAPHQL 변수를 추가하여 경로를 지정합니다.

  3. GraphQL 스키마 파일의 위치를 제공합니다. 파일 경로 또는 URL로 위치를 제공할 수 있습니다. APISEC_GRAPHQL_SCHEMA 변수를 추가하여 위치를 지정합니다.

  4. 대상 API 인스턴스의 기본 URL도 필요합니다. 이를 APISEC_TARGET_URL 변수를 사용하거나 environment_url.txt 파일을 사용하여 제공합니다.

    프로젝트의 루트에 environment_url.txt 파일에 URL을 추가하는 것은 동적 환경에서 테스트하는 데 매우 좋습니다. 더 많은 정보는 우리의 문서의 동적 환경 솔루션 섹션을 참조하세요.

GraphQL 스키마 파일을 사용하는 완전한 구성 예:

stages:
  - dast

include:
  - template: API-Security.gitlab-ci.yml

api_security:
  variables:
    APISEC_GRAPHQL: /api/graphql
    APISEC_GRAPHQL_SCHEMA: test-api-graphql.schema
    APISEC_TARGET_URL: http://test-deployment/

GraphQL 스키마 파일 URL을 사용하는 완전한 구성 예:

stages:
  - dast

include:
  - template: API-Security.gitlab-ci.yml

api_security:
  variables:
    APISEC_GRAPHQL: /api/graphql
    APISEC_GRAPHQL_SCHEMA: http://file-store/files/test-api-graphql.schema
    APISEC_TARGET_URL: http://test-deployment/

이 예는 API 보안 테스트를 위한 최소 구성입니다. 여기서 다음을 수행할 수 있습니다:

포스트맨 컬렉션

Postman API Client는 개발자와 테스터가 다양한 유형의 API를 호출하는 데 사용하는 인기 있는 도구입니다. API 정의는 Postman 컬렉션 파일로 내보낼 수 있습니다 API 보안 테스트에 사용됩니다. 내보낼 때는 지원되는 Postman 컬렉션 버전: v2.0 또는 v2.1을 선택해야 합니다.

GitLab API 보안 테스트 스캐너와 함께 사용할 때, Postman 컬렉션은 유효한 데이터로 테스트할 웹 API의 정의를 포함해야 합니다. API 보안 테스트 스캐너는 모든 API 정의를 추출하고 이를 사용하여 테스트를 수행합니다.

경고:
Postman 컬렉션 파일은 인증 토큰, API 키 및 세션 쿠키와 같은 민감한 정보를 포함할 수 있습니다. 저장소에 추가하기 전에 Postman 컬렉션 파일의 내용을 검토하는 것이 좋습니다.

Postman 컬렉션 파일을 사용한 API 보안 테스트 스캐닝

대상 API에 대한 정보를 제공하는 Postman 컬렉션 파일을 사용하여 API 보안 테스트를 구성하려면:

  1. 포함
    API-Security.gitlab-ci.yml 템플릿을 추가합니다.

  2. 구성 파일에는 다양한 검사 기능이 활성화된 여러 테스트 프로필이 정의되어 있습니다. Quick 프로필로 시작하는 것을 권장합니다.
    이 프로필로 테스트하면 더 빠르게 완료되어 구성 유효성 검사가 더 쉬워집니다.

    프로필은 .gitlab-ci.yml 파일에 APISEC_PROFILE CI/CD 변수를 추가하여 제공합니다.

  3. Postman 컬렉션 파일의 위치를 파일 또는 URL로 제공하십시오. APISEC_POSTMAN_COLLECTION 변수를 추가하여 위치를 지정합니다.

  4. 대상 API 인스턴스의 기본 URL도 필요합니다. APISEC_TARGET_URL 변수를 사용하거나 environment_url.txt 파일을 사용하여 제공합니다.

    프로젝트의 루트에 environment_url.txt 파일에 URL을 추가하는 것은 동적 환경에서 테스트하는 데 유용합니다. GitLab CI/CD 파이프라인에서 동적으로 생성된 앱에 대해 API 보안 테스트를 실행하려면, 앱이 자신의 URL을 environment_url.txt 파일에 유지하게 하십시오. API 보안 테스트는 해당 파일을 자동으로 구문 분석하여 스캔 대상을 찾습니다.
    이를 우리의 Auto DevOps CI YAML에서 예시로 확인할 수 있습니다.

Postman 컬렉션을 사용하는 전체 예제 구성:

stages:
  - dast

include:
  - template: API-Security.gitlab-ci.yml

variables:
  APISEC_PROFILE: Quick
  APISEC_POSTMAN_COLLECTION: postman-collection_serviceA.json
  APISEC_TARGET_URL: http://test-deployment/

이는 API 보안 테스트를 위한 최소한의 구성입니다. 여기에서 할 수 있는 것들은:

Postman 변수

Postman 클라이언트의 변수

Postman은 개발자가 요청의 여러 부분에서 사용할 수 있는 자리 표시자를 정의할 수 있도록 합니다. 이러한 자리 표시자는 변수라고 하며, 변수 사용에서 설명되었습니다.

변수를 사용하여 요청 및 스크립트에서 값을 저장하고 재사용할 수 있습니다. 예를 들어, 컬렉션을 편집하여 문서에 변수를 추가할 수 있습니다:

컬렉션 변수 편집 탭 보기

또는 환경에 변수를 추가할 수 있습니다:

환경 변수 편집 보기

그런 다음 URL, 헤더 및 기타 섹션에서 변수를 사용할 수 있습니다:

변수를 사용한 요청 편집 보기

Postman은 훌륭한 사용자 경험을 제공하는 기본 클라이언트 도구에서 API를 테스트할 수 있는 스크립트, 복잡한 컬렉션 생성, 부수 요청을 트리거하고 변수를 설정하는 복잡한 생태계로 성장했습니다. Postman 생태계의 모든 기능이 지원되는 것은 아닙니다. 예를 들어, 스크립트는 지원되지 않습니다. Postman 지원의 주요 초점은 Postman 클라이언트에서 사용되는 Postman 컬렉션 정의와 작업공간, 환경 및 컬렉션 자체에 정의된 관련 변수를 수용하는 것입니다.

Postman은 다양한 스코프에서 변수를 생성할 수 있게 해줍니다. 각 스코프는 Postman 도구에서 서로 다른 수준의 가시성을 가집니다. 예를 들어 모든 작업 정의 및 작업공간에서 볼 수 있는 전역 환경 스코프에서 변수를 생성할 수 있습니다. 선택적 환경에 대해서만 볼 수 있고 사용할 수 있는 특정 환경 스코프에서도 변수를 생성할 수 있습니다. 특정한 스코프는 항상 사용 가능한 것은 아닙니다. 예를 들어 Postman 생태계에서 Postman 클라이언트에서 요청을 생성할 수 있지만, 이러한 요청에는 로컬 스코프가 없고 테스트 스크립트에는 있습니다.

Postman에서 변수 스코프는 복잡한 주제일 수 있으며 모든 사람이 익숙하지 않을 수 있습니다. 진행하기 전에 Postman 문서의 변수 스코프를 읽는 것을 강력히 권장합니다.

앞에서 언급했듯이 서로 다른 변수 스코프가 있으며 각 스코프는 목적이 다르고 Postman 문서에 유연성을 제공하는 데 사용될 수 있습니다. 변수의 값이 계산되는 방법에 대한 중요한 정보는 Postman 문서에 있습니다:

서로 다른 스코프에 같은 이름으로 변수가 선언된 경우, 가장 좁은 스코프에 저장된 변수가 사용됩니다. 예를 들어 글로벌 변수 username과 로컬 변수 username이 있을 경우 요청이 실행될 때 로컬 값이 사용됩니다.

다음은 Postman 클라이언트와 API 보안 테스트에서 지원되는 변수 스코프의 요약입니다:

  • 전역 환경(전역) 스코프는 작업공간 전반에서 사용 가능한 특별한 미리 정의된 환경입니다. 전역 환경 스코프를 전역 스코프로도 참조할 수 있습니다. Postman 클라이언트는 전역 환경을 JSON 파일로 내보낼 수 있으며, 이 파일은 API 보안 테스트에서 사용할 수 있습니다.
  • 환경 스코프는 Postman 클라이언트에서 사용자가 생성한 변수의 이름이 붙은 그룹입니다. Postman 클라이언트는 전역 환경과 함께 단일 활성 환경을 지원합니다. 활성 사용자 생성 환경에 정의된 변수는 전역 환경에 정의된 변수보다 우선권을 가집니다. Postman 클라이언트는 환경을 JSON 파일로 내보낼 수 있으며, 이 파일은 API 보안 테스트에서 사용할 수 있습니다.
  • 컬렉션 스코프는 주어진 컬렉션에 선언된 변수의 그룹입니다. 컬렉션 변수는 선언된 컬렉션과 그 안의 요청 또는 컬렉션에서 사용할 수 있습니다. 컬렉션 스코프에 정의된 변수는 전역 환경 스코프 및 환경 스코프보다 우선권을 가집니다. Postman 클라이언트는 하나 이상의 컬렉션을 JSON 파일로 내보낼 수 있으며, 이 JSON 파일에는 선택된 컬렉션, 요청 및 컬렉션 변수가 포함됩니다.
  • API 보안 테스트 스코프는 사용자가 추가 변수를 제공하거나 다른 지원 스코프에 정의된 변수를 재정의할 수 있도록 API 보안 테스트에서 추가된 새로운 스코프입니다. 이 스코프는 Postman에서 지원되지 않습니다. API 보안 테스트 스코프 변수는 사용자 정의 JSON 파일 형식으로 제공됩니다.
    • 환경 또는 컬렉션에서 정의된 값을 재정의합니다.
    • 스크립트에서 변수를 정의합니다.
    • 지원되지 않는 _데이터 스코프_에서 단일 데이터를 정의합니다.
  • 데이터 스코프는 이름과 값이 JSON 또는 CSV 파일에서 가져온 변수의 그룹입니다. Newman 또는 Postman Collection Runner와 같은 Postman 컬렉션 러너는 JSON 또는 CSV 파일의 항목 수만큼 요청을 실행합니다. 이 변수의 좋은 사용 사례는 Postman에서 스크립트를 사용하여 테스트를 자동화하는 것입니다. API 보안 테스트는 CSV 또는 JSON 파일에서 데이터를 읽는 것을 지원하지 않습니다.
  • 로컬 스코프는 Postman 스크립트에서 정의된 변수입니다. API 보안 테스트는 Postman 스크립트를 지원하지 않으며, 따라서 스크립트에서 정의된 변수도 지원하지 않습니다. 그러나 지원되는 스코프 중 하나 또는 사용자 정의 JSON 형식에서 이러한 스크립트 정의 변수를 위한 값을 제공할 수 있습니다.

모든 스코프가 API 보안 테스트에서 지원되는 것은 아니며 스크립트에서 정의된 변수를 지원하지 않습니다. 다음 표는 넓은 스코프에서 좁은 스코프 제거된 순서로 정렬되어 있습니다.

스코프 Postman API 보안 테스트 비고
전역 환경 미리 정의된 특별한 환경
환경 이름이 붙은 환경
컬렉션 Postman 컬렉션에 정의된
API 보안 테스트 스코프 아니오 API 보안 테스트에서 추가한 사용자 정의 스코프
데이터 아니오 CSV 또는 JSON 형식의 외부 파일
로컬 아니오 스크립트에서 정의된 변수

변수를 정의하고 다양한 스코프에서 변수를 내보내는 방법에 대한 자세한 내용은 다음을 참조하세요:

Postman 클라이언트에서 내보내기

Postman 클라이언트를 사용하면 다양한 파일 형식으로 내보낼 수 있습니다. 예를 들어, Postman 컬렉션 또는 Postman 환경을 내보낼 수 있습니다.

내보낸 환경은 전역 환경(항상 사용 가능)일 수도 있고, 이전에 생성한 사용자 지정 환경일 수도 있습니다. Postman 컬렉션을 내보낼 때는 collectionlocal 범위의 변수에 대한 선언만 포함됩니다. environment 범위의 변수는 포함되지 않습니다.

environment 범위 변수에 대한 선언을 가져오려면, 특정 환경을 내보내야 합니다. 내보낸 각 파일은 선택한 환경의 변수만 포함합니다.

다양한 지원 범위에서 변수를 내보내는 방법에 대한 자세한 내용은 다음을 참조하세요:

API 보안 테스트 범위, 사용자 정의 JSON 파일 형식

당사의 사용자 정의 JSON 파일 형식은 각 객체 속성이 변수 이름을 나타내고 속성 값이 변수 값을 나타내는 JSON 객체입니다. 이 파일은 사용자가 선호하는 텍스트 편집기를 사용하여 만들 수 있으며, 또는 파이프라인의 이전 작업에서 생성할 수 있습니다.

이 예제는 API 보안 테스트 범위에서 두 개의 변수 base_urltoken을 정의합니다:

{
  "base_url": "http://127.0.0.1/",
  "token": "Token 84816165151"
}

API 보안 테스트와 스코프 사용

스코프: global, environment, collection, 및 GitLab API 보안 테스트_는 GitLab 15.1 이상에서 지원됩니다. GitLab 15.0 및 이전 버전은 오직 _collectionGitLab API 보안 테스트 범위만 지원합니다.

다음 표는 API 보안 테스트 설정 변수에 대한 스코프 파일/URL 매핑에 대한 빠른 참조를 제공합니다:

범위 제공 방법
전역 환경 APISEC_POSTMAN_COLLECTION_VARIABLES
환경 APISEC_POSTMAN_COLLECTION_VARIABLES
컬렉션 APISEC_POSTMAN_COLLECTION
API 보안 테스트 범위 APISEC_POSTMAN_COLLECTION_VARIABLES
데이터 지원하지 않음
로컬 지원하지 않음

Postman 컬렉션 문서는 자동으로 모든 collection 범위 변수를 포함합니다. Postman 컬렉션은 설정 변수 APISEC_POSTMAN_COLLECTION과 함께 제공됩니다. 이 변수는 단일 내보낸 Postman 컬렉션으로 설정할 수 있습니다.

다른 범위의 변수는 APISEC_POSTMAN_COLLECTION_VARIABLES 설정 변수를 통해 제공됩니다. 이 설정 변수는 GitLab 15.1 이상에서 쉼표(,)로 구분된 파일 목록을 지원합니다. GitLab 15.0 및 이전 버전은 단일 파일만 지원합니다. 제공된 파일의 순서는 중요하지 않으며, 파일은 필요한 범위 정보를 제공합니다.

설정 변수 APISEC_POSTMAN_COLLECTION_VARIABLES는 다음으로 설정할 수 있습니다:

정의되지 않은 Postman 변수

API 보안 테스트 엔진이 Postman 컬렉션 파일에서 사용하는 모든 변수 참조를 찾지 못할 가능성이 있습니다. 다음과 같은 경우가 있을 수 있습니다:

  • data 또는 local 범위 변수를 사용하고 있으며, 이전에 언급한 바와 같이 이러한 범위는 API 보안 테스트에서 지원되지 않습니다. 따라서 이 변수의 값이 API 보안 테스트 범위를 통해 제공되지 않았다면, datalocal 범위 변수의 값은 정의되지 않습니다.

  • 변수 이름이 잘못 입력되었고, 이름이 정의된 변수와 일치하지 않습니다.

  • Postman 클라이언트가 API 보안 테스트에서 지원되지 않는 새로운 동적 변수를 지원합니다.

가능한 경우, API 보안 테스트는 정의되지 않은 변수를 처리할 때 Postman 클라이언트와 동일한 동작을 따릅니다. 변수 참조의 텍스트는 그대로 유지되며, 텍스트 대체는 없습니다. 이러한 동작은 지원되지 않는 동적 변수에도 동일하게 적용됩니다.

예를 들어, Postman 컬렉션의 요청 정의가 변수 {{full_url}}를 참조하고 있지만 변수가 발견되지 않을 경우, 값 {{full_url}}를 그대로 유지합니다.

동적 Postman 변수

사용자가 다양한 범위 수준에서 정의할 수 있는 변수 외에도, Postman에는 동적 변수라고 불리는 미리 정의된 변수 세트가 있습니다. 동적 변수는 이미 정의되어 있으며 이름이 달러 기호($)로 접두사 붙습니다. 예를 들어, $guid가 있습니다. 동적 변수는 다른 변수처럼 사용될 수 있으며, Postman 클라이언트에서는 요청/컬렉션 실행 중에 무작위 값을 생성합니다.

API 보안 테스트와 Postman의 중요한 차이점은 API 보안 테스트가 동일한 동적 변수의 각 사용에 대해 동일한 값을 반환한다는 것입니다. 이는 Postman 클라이언트의 동작과 달리 동일한 동적 변수의 사용 시 무작위 값을 반환합니다. 다시 말해, API 보안 테스트는 동적 변수에 대해 정적 값을 사용하고 Postman은 무작위 값을 사용합니다.

스캐닝 과정에서 지원되는 동적 변수는 다음과 같습니다:

변수
$guid 611c2e81-2ccb-42d8-9ddc-2d0bfa65c1b4
$isoTimestamp 2020-06-09T21:10:36.177Z
$randomAbbreviation PCI
$randomAbstractImage http://no-a-valid-host/640/480/abstract
$randomAdjective auxiliary
$randomAlphaNumeric a
$randomAnimalsImage http://no-a-valid-host/640/480/animals
$randomAvatarImage https://no-a-valid-host/path/to/some/image.jpg
$randomBankAccount 09454073
$randomBankAccountBic EZIAUGJ1
$randomBankAccountIban MU20ZPUN3039684000618086155TKZ
$randomBankAccountName Home Loan Account
$randomBitcoin 3VB8JGT7Y4Z63U68KGGKDXMLLH5
$randomBoolean true
$randomBs killer leverage schemas
$randomBsAdjective viral
$randomBsBuzz repurpose
$randomBsNoun markets
$randomBusinessImage http://no-a-valid-host/640/480/business
$randomCatchPhrase Future-proofed heuristic open architecture
$randomCatchPhraseAdjective Business-focused
$randomCatchPhraseDescriptor bandwidth-monitored
$randomCatchPhraseNoun superstructure
$randomCatsImage http://no-a-valid-host/640/480/cats
$randomCity Spinkahaven
$randomCityImage http://no-a-valid-host/640/480/city
$randomColor fuchsia
$randomCommonFileExt wav
$randomCommonFileName well_modulated.mpg4
$randomCommonFileType audio
$randomCompanyName Grady LLC
$randomCompanySuffix Inc
$randomCountry Kazakhstan
$randomCountryCode MD
$randomCreditCardMask 3622
$randomCurrencyCode ZMK
$randomCurrencyName Pound Sterling
$randomCurrencySymbol £
$randomDatabaseCollation utf8_general_ci
$randomDatabaseColumn updatedAt
$randomDatabaseEngine Memory
$randomDatabaseType text
$randomDateFuture Tue Mar 17 2020 13:11:50 GMT+0530 (India Standard Time)
$randomDatePast Sat Mar 02 2019 09:09:26 GMT+0530 (India Standard Time)
$randomDateRecent Tue Jul 09 2019 23:12:37 GMT+0530 (India Standard Time)
$randomDepartment Electronics
$randomDirectoryPath /usr/local/bin
$randomDomainName trevor.info
$randomDomainSuffix org
$randomDomainWord jaden
$randomEmail Iva.Kovacek61@no-a-valid-host.com
$randomExampleEmail non-a-valid-user@example.net
$randomFashionImage http://no-a-valid-host/640/480/fashion
$randomFileExt war
$randomFileName neural_sri_lanka_rupee_gloves.gdoc
$randomFilePath /home/programming_chicken.cpio
$randomFileType application
$randomFirstName Chandler
$randomFoodImage http://no-a-valid-host/640/480/food
$randomFullName Connie Runolfsdottir
$randomHexColor #47594a
$randomImageDataUri data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20version%3D%221.1%22%20baseProfile%3D%22full%22%20width%3D%22undefined%22%20height%3D%22undefined%22%3E%20%3Crect%20width%3D%22100%25%22%20height%3D%22100%25%22%20fill%3D%22grey%22%2F%3E%20%20%3Ctext%20x%3D%220%22%20y%3D%2220%22%20font-size%3D%2220%22%20text-anchor%3D%22start%22%20fill%3D%22white%22%3Eundefinedxundefined%3C%2Ftext%3E%20%3C%2Fsvg%3E
$randomImageUrl http://no-a-valid-host/640/480
$randomIngverb navigating
$randomInt 494
$randomIP 241.102.234.100
$randomIPV6 dbe2:7ae6:119b:c161:1560:6dda:3a9b:90a9
$randomJobArea Mobility
$randomJobDescriptor Senior
$randomJobTitle International Creative Liaison
$randomJobType Supervisor
$randomLastName Schneider
$randomLatitude 55.2099
$randomLocale ny
$randomLongitude 40.6609
$randomLoremLines Ducimus in ut mollitia.\nA itaque non.\nHarum temporibus nihil voluptas.\nIste in sed et nesciunt in quaerat sed.
$randomLoremParagraph Ab aliquid odio iste quo voluptas voluptatem dignissimos velit. Recusandae facilis qui commodi ea magnam enim nostrum quia quis. Nihil est suscipit assumenda ut voluptatem sed. Esse ab voluptas odit qui molestiae. Rem est nesciunt est quis ipsam expedita consequuntur.
$randomLoremParagraphs Voluptatem rem magnam aliquam ab id aut quaerat. Placeat provident possimus voluptatibus dicta velit non aut quasi. Mollitia et aliquam expedita sunt dolores nam consequuntur. Nam dolorum delectus ipsam repudiandae et ipsam ut voluptatum totam. Nobis labore labore recusandae ipsam quo.
$randomLoremSentence Molestias consequuntur nisi non quod.
$randomLoremSentences Et sint voluptas similique iure amet perspiciatis vero sequi atque. Ut porro sit et hic. Neque aspernatur vitae fugiat ut dolore et veritatis. Ab iusto ex delectus animi. Voluptates nisi iusto. Impedit quod quae voluptate qui.
$randomLoremSlug eos-aperiam-accusamus, beatae-id-molestiae, qui-est-repellat
$randomLoremText Quisquam asperiores exercitationem ut ipsum. Aut eius nesciunt. Et reiciendis aut alias eaque. Nihil amet laboriosam pariatur eligendi. Sunt ullam ut sint natus ducimus. Voluptas harum aspernatur soluta rem nam.
$randomLoremWord est
$randomLoremWords vel repellat nobis
$randomMACAddress 33:d4:68:5f:b4:c7
$randomMimeType audio/vnd.vmx.cvsd
$randomMonth February
$randomNamePrefix Dr.
$randomNameSuffix MD
$randomNatureImage http://no-a-valid-host/640/480/nature
$randomNightlifeImage http://no-a-valid-host/640/480/nightlife
$randomNoun bus
$randomPassword t9iXe7COoDKv8k3
$randomPeopleImage http://no-a-valid-host/640/480/people
$randomPhoneNumber 700-008-5275
$randomPhoneNumberExt 27-199-983-3864
$randomPhrase You can't program the monitor without navigating the mobile XML program!
$randomPrice 531.55
$randomProduct Pizza
$randomProductAdjective Unbranded
$randomProductMaterial Steel
$randomProductName Handmade Concrete Tuna
$randomProtocol https
$randomSemver 7.0.5
$randomSportsImage http://no-a-valid-host/640/480/sports
$randomStreetAddress 5742 Harvey Streets
$randomStreetName Kuhic Island
$randomTransactionType payment
$randomTransportImage http://no-a-valid-host/640/480/transport
$randomUrl https://no-a-valid-host.net
$randomUserAgent Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.9.8; rv:15.6) Gecko/20100101 Firefox/15.6.6
$randomUserName Jarrell.Gutkowski
$randomUUID 6929bb52-3ab2-448a-9796-d6480ecad36b
$randomVerb navigate
$randomWeekday Thursday
$randomWord withdrawal
$randomWords Samoa Synergistic sticky copying Grocery
$timestamp 1562757107

예시: 글로벌 범위

이 예시에서, 글로벌 스코프는 Postman 클라이언트에서 global-scope.json으로 내보내지고 APISEC_POSTMAN_COLLECTION_VARIABLES 구성 변수를 통해 API 보안 테스트에 제공됩니다.

APISEC_POSTMAN_COLLECTION_VARIABLES를 사용하는 예시는 다음과 같습니다:

stages:
  - dast

include:
  - template: API-Security.gitlab-ci.yml

variables:
  APISEC_PROFILE: Quick
  APISEC_POSTMAN_COLLECTION: postman-collection.json
  APISEC_POSTMAN_COLLECTION_VARIABLES: global-scope.json
  APISEC_TARGET_URL: http://test-deployment/

예시: 환경 범위

이 예시에서, 환경 스코프는 Postman 클라이언트에서 environment-scope.json으로 내보내지고 APISEC_POSTMAN_COLLECTION_VARIABLES 구성 변수를 통해 API 보안 테스트에 제공됩니다.

APISEC_POSTMAN_COLLECTION_VARIABLES를 사용하는 예시는 다음과 같습니다:

stages:
  - dast

include:
  - template: API-Security.gitlab-ci.yml

variables:
  APISEC_PROFILE: Quick
  APISEC_POSTMAN_COLLECTION: postman-collection.json
  APISEC_POSTMAN_COLLECTION_VARIABLES: environment-scope.json
  APISEC_TARGET_URL: http://test-deployment/

예시: 컬렉션 범위

컬렉션 스코프 변수는 내보내진 Postman 컬렉션 파일에 포함되어 있으며, APISEC_POSTMAN_COLLECTION 구성 변수를 통해 제공됩니다.

APISEC_POSTMAN_COLLECTION을 사용하는 예시는 다음과 같습니다:

stages:
  - dast

include:
  - template: API-Security.gitlab-ci.yml

variables:
  APISEC_PROFILE: Quick
  APISEC_POSTMAN_COLLECTION: postman-collection.json
  APISEC_TARGET_URL: http://test-deployment/

예시: API 보안 테스트 범위

API 보안 테스트 범위는 두 가지 주요 용도로 사용됩니다, 즉 API 보안 테스트에서 지원되지 않는 데이터 및 로컬 스코프 변수를 정의하고, 다른 범위에서 정의된 기존 변수의 값을 변경합니다. API 보안 테스트 범위는 APISEC_POSTMAN_COLLECTION_VARIABLES 구성 변수를 통해 제공됩니다.

APISEC_POSTMAN_COLLECTION_VARIABLES를 사용하는 예시는 다음과 같습니다:

stages:
  - dast

include:
  - template: API-Security.gitlab-ci.yml

variables:
  APISEC_PROFILE: Quick
  APISEC_POSTMAN_COLLECTION: postman-collection.json
  APISEC_POSTMAN_COLLECTION_VARIABLES: dast-api-scope.json
  APISEC_TARGET_URL: http://test-deployment/

파일 dast-api-scope.json은 우리의 커스텀 JSON 파일 형식을 사용합니다. 이 JSON은 속성을 위한 키-값 쌍을 가진 객체입니다. 키는 변수 이름이고, 값은 변수의 값입니다. 예를 들어:

{
  "base_url": "http://127.0.0.1/",
  "token": "Token 84816165151"
}

예시: 여러 범위

이 예시에서, 글로벌 범위, 환경 범위, 그리고 컬렉션 범위가 구성됩니다. 첫 번째 단계는 다양한 범위를 내보내는 것입니다.

Postman 컬렉션은 APISEC_POSTMAN_COLLECTION 변수를 사용하여 제공되며, 다른 범위는 APISEC_POSTMAN_COLLECTION_VARIABLES를 사용하여 제공됩니다. API 보안 테스트는 제공된 파일이 각 파일에서 제공된 데이터를 사용하여 어떤 범위와 일치하는지 식별할 수 있습니다.

stages:
  - dast

include:
  - template: API-Security.gitlab-ci.yml

variables:
  APISEC_PROFILE: Quick
  APISEC_POSTMAN_COLLECTION: postman-collection.json
  APISEC_POSTMAN_COLLECTION_VARIABLES: global-scope.json,environment-scope.json
  APISEC_TARGET_URL: http://test-deployment/

예시: 변수 값 변경

내보낸 스코프를 사용할 때, 변수의 값을 API 보안 테스트와 함께 사용하기 위해 변경해야 하는 경우가 종종 있습니다. 예를 들어, collection 스코프 변수에는 api_version이라는 변수가 v2 값을 가질 수 있고, 반면에 테스트에서는 v1 값이 필요합니다. 값을 변경하기 위해 내보낸 컬렉션을 수정하는 대신 API 보안 테스트 스코프를 사용하여 값을 변경할 수 있습니다. 이는 API 보안 테스트 스코프가 모든 다른 스코프보다 우선하기 때문에 가능합니다.

collection 스코프 변수는 내보낸 Postman 컬렉션 파일에 포함되며 APISEC_POSTMAN_COLLECTION 구성 변수를 통해 제공됩니다.

API 보안 테스트 스코프는 APISEC_POSTMAN_COLLECTION_VARIABLES 구성 변수를 통해 제공되지만, 먼저 파일을 생성해야 합니다.

파일 dast-api-scope.json은 우리의 사용자 정의 JSON 파일 형식을 사용합니다. 이 JSON은 속성에 대한 키-값 쌍을 가진 객체입니다. 키는 변수의 이름이고, 값은 변수의 값입니다. 예를 들면:

{
  "api_version": "v1"
}

우리의 CI 정의:

stages:
  - dast

include:
  - template: API-Security.gitlab-ci.yml

variables:
  APISEC_PROFILE: Quick
  APISEC_POSTMAN_COLLECTION: postman-collection.json
  APISEC_POSTMAN_COLLECTION_VARIABLES: dast-api-scope.json
  APISEC_TARGET_URL: http://test-deployment/

예시: 여러 스코프를 사용한 변수 값 변경

내보낸 스코프를 사용할 때, 변수의 값을 API 보안 테스트와 함께 사용하기 위해 변경해야 하는 경우가 종종 있습니다. 예를 들어, environment 스코프에는 api_version이라는 변수가 v2 값을 가질 수 있고, 반면에 테스트에서는 v1 값이 필요합니다. 값을 변경하기 위해 내보낸 파일을 수정하는 대신 API 보안 테스트 스코프를 사용할 수 있습니다. 이는 API 보안 테스트 스코프가 모든 다른 스코프보다 우선하기 때문에 가능합니다.

이 예시에서 global 스코프, environment 스코프, collection 스코프 및 API 보안 테스트 스코프가 구성됩니다. 첫 번째 단계는 다양한 스코프를 내보내고 생성하는 것입니다.

API 보안 테스트 스코프는 우리의 사용자 정의 JSON 파일 형식을 사용하여 파일 dast-api-scope.json을 생성함으로써 사용됩니다. 이 JSON은 속성에 대한 키-값 쌍을 가진 객체입니다. 키는 변수의 이름이고, 값은 변수의 값입니다. 예를 들면:

{
  "api_version": "v1"
}

Postman 컬렉션은 APISEC_POSTMAN_COLLECTION 변수를 사용하여 제공되며, 다른 스코프는 APISEC_POSTMAN_COLLECTION_VARIABLES를 사용하여 제공됩니다. API 보안 테스트는 제공된 파일이 각 파일에 제공된 데이터와 일치하는 스코프를 식별할 수 있습니다.

stages:
  - dast

include:
  - template: API-Security.gitlab-ci.yml

variables:
  APISEC_PROFILE: Quick
  APISEC_POSTMAN_COLLECTION: postman-collection.json
  APISEC_POSTMAN_COLLECTION_VARIABLES: global-scope.json,environment-scope.json,dast-api-scope.json
  APISEC_TARGET_URL: http://test-deployment/

첫 번째 스캔 실행하기

올바르게 구성된 경우 CI/CD 파이프라인에는 dast 단계와 dast_api 작업이 포함됩니다. 이 작업은 잘못된 구성이 제공될 때만 실패합니다. 일반적인 운영 중에는 테스트 중에 취약점이 식별되더라도 작업이 항상 성공합니다.

취약점은 스위트 이름과 함께 보안 파이프라인 탭에 표시됩니다. 리포지토리의 기본 브랜치에 대해 테스트할 때, API 보안 테스트 취약점도 보안 및 컴플라이언스의 취약점 보고서 페이지에 표시됩니다.

보고된 취약점의 수를 과도하게 방지하기 위해, API 보안 테스트 스캐너는 작업당 보고하는 취약점의 수를 제한합니다.

API 보안 테스트 취약점 보기

API 보안 테스트 분석기는 JSON 보고서를 생성하며, 이 보고서는 수집되어 취약점을 GitLab 취약점 화면에 표시하는 데 사용됩니다.

허위 긍정 처리에 대한 정보는 보고된 허위 긍정의 수를 제한하기 위해 수행할 수 있는 구성 변경 사항에 대해 설명합니다.

API 보안 테스트 취약점의 세부정보 보기

취약점의 세부정보를 보기 위해 다음 단계를 따르세요:

  1. 프로젝트에서 또는 병합 요청에서 취약점을 볼 수 있습니다:

    • 프로젝트에서, 프로젝트의 보안 > 취약점 보고서 페이지로 이동하세요. 이 페이지는 기본 브랜치의 모든 취약점을 보여줍니다.
    • 병합 요청에서, 병합 요청의 보안 섹션으로 이동하고 확장 버튼을 선택합니다. API 보안 테스트 취약점은 DAST가 N개의 잠재적 취약점을 탐지했습니다라는 레이블이 붙은 섹션에 있습니다. 제목을 선택하여 취약점 세부정보를 표시합니다.
  2. 세부정보를 표시하려면 취약점 제목을 선택하세요. 아래 표는 이러한 세부정보를 설명합니다.

    필드 설명
    설명 수정된 내용을 포함한 취약점의 설명.
    프로젝트 취약점이 발견된 네임스페이스 및 프로젝트.
    방법 취약점을 감지하는 데 사용된 HTTP 방법.
    URL 취약점이 감지된 URL.
    요청 취약점을 초래한 HTTP 요청.
    수정되지 않은 응답 수정되지 않은 요청의 응답. 이것은 일반적인 작동 응답의 모습입니다.
    실제 응답 테스트 요청으로부터 받은 응답.
    증거 취약점이 발생했음을 확인한 방법.
    식별자 이 취약점을 찾는 데 사용된 API 보안 테스트 확인.
    심각도 취약점의 심각도.
    스캐너 유형 테스트를 수행하는 데 사용된 스캐너.

보안 대시보드

보안 대시보드는 그룹, 프로젝트 및 파이프라인의 모든 보안 취약점에 대한 개요를 얻기에 좋은 장소입니다. 더 많은 정보는 보안 대시보드 문서를 참조하세요.

취약점과 상호작용하기

취약점이 발견되면, 해당 취약점과 상호작용할 수 있습니다. 취약점을 해결하는 방법에 대한 자세한 내용은 취약점 처리하기를 참조하세요.

허위 긍정 처리

허위 긍정은 여러 방법으로 처리할 수 있습니다:

  • 취약점을 무시합니다.
  • 몇몇 확인은 취약점이 식별될 때 호출되는 여러 감지 방법을 가지고 있으며, 이를 _Assertions_라고 합니다. Assertions는 꺼지거나 구성될 수 있습니다. 예를 들어, API 보안 테스트 스캐너는 기본적으로 HTTP 상태 코드를 사용하여 실제 문제가 언제인지 식별하는 데 도움을 줍니다. API가 테스트 중에 500 오류를 반환하면, 이것은 취약점을 생성합니다. 일부 프레임워크가 자주 500 오류를 반환하므로, 이는 항상 바람직하지는 않습니다.
  • 허위 긍정을 생성하는 확인을 꺼십시오. 이는 해당 확인이 어떤 취약점도 생성하는 것을 방지합니다. 예시 확인은 SQL Injection Check 및 JSON Hijacking Check입니다.

체크 끄기

체크는 특정 유형의 테스트를 수행하며 특정 구성 프로파일에 대해 켜고 끌 수 있습니다. 제공된 구성 파일은 사용할 수 있는 여러 프로파일을 정의합니다. 구성 파일에서의 프로파일 정의는 스캔 중 활성화된 모든 체크를 나열합니다. 특정 체크를 끄려면 구성 파일의 프로파일 정의에서 해당 체크를 제거하면 됩니다. 프로파일은 구성 파일의 Profiles 섹션에 정의됩니다.

예제 프로파일 정의:

Profiles:
  - Name: Quick
    DefaultProfile: Empty
    Routes:
      - Route: *Route0
        Checks:
          - Name: ApplicationInformationCheck
          - Name: CleartextAuthenticationCheck
          - Name: FrameworkDebugModeCheck
          - Name: HtmlInjectionCheck
          - Name: InsecureHttpMethodsCheck
          - Name: JsonHijackingCheck
          - Name: JsonInjectionCheck
          - Name: SensitiveInformationCheck
          - Name: SessionCookieCheck
          - Name: SqlInjectionCheck
          - Name: TokenCheck
          - Name: XmlInjectionCheck

JSON Hijacking Check를 끄려면 다음 줄을 제거할 수 있습니다:

          - Name: JsonHijackingCheck

그 결과 다음과 같은 YAML이 됩니다:

- Name: Quick
  DefaultProfile: Empty
  Routes:
    - Route: *Route0
      Checks:
        - Name: ApplicationInformationCheck
        - Name: CleartextAuthenticationCheck
        - Name: FrameworkDebugModeCheck
        - Name: HtmlInjectionCheck
        - Name: InsecureHttpMethodsCheck
        - Name: JsonInjectionCheck
        - Name: SensitiveInformationCheck
        - Name: SessionCookieCheck
        - Name: SqlInjectionCheck
        - Name: TokenCheck
        - Name: XmlInjectionCheck

체크에 대한 Assertion 끄기

Assertions는 체크에서 생성된 테스트의 취약점을 감지합니다. 많은 체크가 Log Analysis, Response Analysis, Status Code와 같은 여러 Assertions를 지원합니다. 취약점이 발견되면 사용된 Assertion이 제공됩니다. 기본적으로 어떤 Assertions가 활성화되어 있는지 확인하려면 구성 파일에서 Checks 기본 구성을 참조하세요. 이 섹션은 Checks라고 불립니다.

다음 예제는 SQL Injection Check를 보여줍니다:

- Name: SqlInjectionCheck
  Configuration:
    UserInjections: []
  Assertions:
    - Name: LogAnalysisAssertion
    - Name: ResponseAnalysisAssertion
    - Name: StatusCodeAssertion

여기에서 기본적으로 세 가지 Assertions가 활성화되어 있음을 확인할 수 있습니다. 허위 양성의 일반적인 원인은 StatusCodeAssertion입니다. 이를 끄려면 Profiles 섹션에서 구성 설정을 수정해야 합니다. 이 예제는 다른 두 개의 Assertions(LogAnalysisAssertion, ResponseAnalysisAssertion)만 제공합니다. 이는 SqlInjectionCheck에서 StatusCodeAssertion을 사용하지 못하게 합니다:

Profiles:
  - Name: Quick
    DefaultProfile: Empty
    Routes:
      - Route: *Route0
        Checks:
          - Name: ApplicationInformationCheck
          - Name: CleartextAuthenticationCheck
          - Name: FrameworkDebugModeCheck
          - Name: HtmlInjectionCheck
          - Name: InsecureHttpMethodsCheck
          - Name: JsonHijackingCheck
          - Name: JsonInjectionCheck
          - Name: SensitiveInformationCheck
          - Name: SessionCookieCheck
          - Name: SqlInjectionCheck
            Assertions:
              - Name: LogAnalysisAssertion
              - Name: ResponseAnalysisAssertion
          - Name: TokenCheck
          - Name: XmlInjectionCheck