Zest + YAML = ❤️

최근에 Zest 쪽의 Commit (zaproxy/zest/6d67925) 하나를 주시하고 있었습니다. 바로 Zest에서 YAML 포맷 지원에 대한 내용이였는데요. 드디어 공식 릴리즈가 이루어졌고 이제 Zest에서 YAML 포맷을 사용할 수 있게 되었습니다.

What is Zest

Zest는 자동화된 보안 테스팅을 위한 언어로 기존에는 JSON/YAML 기반의 언어입니다. 기본적으로 Web Request를 전송하고 Response를 핸들링하고 조건, 반복 등 작성한 코드에 따라 원하는 액션을 처리할 수 있습니다. 그리고 Headless Browser에 대한 동작도 명시할 수 있어서 테스팅 자동화 뿐만 아니라 Manual 테스팅 또한 보조해줄 수 있는 좋은 도구입니다.

Zest에 대한 자세한 내용이 궁금하다면 “Cullinan > Zest“를 참고해주세요.

YAML Zest in ZAP

Zest에서 YAML 지원이 이루어짐과 동시에 ZAP에서도 이에 대응되어 업데이트된 부분이 존재합니다. Options에서 Zest의 기본 포맷을 지정할 수 있습니다.

Options > Zest > Script Format

위와 같이 JSON -> YAML로 변경하면 기존 스크립트를 포함하여 YAML 포맷으로 동작하게 됩니다.

Script Console에서도 YAML로 표기됩니다.

YAML Script Sample

예전에 Zest를 통한 authentication 예시로 작성했었던 코드의 YAML 버전입니다. 같은 코드인데 JSON -> YAML로 인해 코드 줄 수가 66줄에서 37줄로 거의 반으로 줄었습니다.

---
about: This is a Zest script. For more details about Zest visit https://github.com/zaproxy/zest/
zestVersion: 0.3
title: StarBucksLogin
description: ""
prefix: ""
type: StandAlone
parameters:
  tokenStart: "{{"
  tokenEnd: "}}"
  tokens:
    Username: ""
    LoginURL: ""
    Password: ""
  elementType: ZestVariables
statements:
- comment: |-
    Authentication scripts are used to authenticate to an application.
     The Username and Password parameters are set depending on how the script is invoked.
  index: 1
  enabled: true
  elementType: ZestComment
- urlToken: "{{LoginURL}}"
  data: "username={{Username}}&password={{Password}}"
  method: POST
  headers: "Content-Type: application/x-www-form-urlencoded"
  assertions: []
  followRedirects: true
  timestamp: 0
  cookies: []
  index: 2
  enabled: true
  elementType: ZestRequest
authentication: []
index: 0
enabled: true
elementType: ZestScript

Conclusion

JSON은 beautify 시 줄 수가 너무 길어집니다. 이는 JSON을 직접 수정해야하는 경우 굉장히 불편한 요소로 작용하는데요. 다행히 이제부턴 YAML 포맷이 지원되기 때문에 ZAP에서의 수정 이외에도 CLI나 VSCode에서도 자주 작성하게 될 것 같습니다.

그래서 개인적으로 YAML 지원은 굉장히 반가웠습니다 😍