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 지원은 굉장히 반가웠습니다 😍