pgard

오픈소스 · MIT · 사전 출시

남보다 먼저, 내 코드를 검사하세요.

내 프로젝트의 보안 스캐너 — 코드, Git 이력, 로컬 웹을 내 컴퓨터에서 점검합니다. 검사 권한이 있는 GitHub 저장소만 검사하며, 검사할 때마다 이를 다시 확인하고, 코드와 결과를 업로드하지 않습니다.

설치

npm install -g pgard

사전 출시 첫 릴리스 준비 중입니다. 지금은 소스에서 빌드해 사용하세요.

git clone https://github.com/JadenMeister/pgard.git && cd pgard && npm ci && npm run build

GitHub에서 Star 문서 읽기 하지 못하는 일

01

사용 방법.

세 단계, 모두 터미널에서.

  1. 설치

    npm 또는 Homebrew로 설치합니다.

    첫 릴리스 준비 중입니다. 지금은 소스에서 빌드하세요.

    npm install -g pgard
    git clone https://github.com/JadenMeister/pgard.git cd pgard npm ci npm run build
  2. 로그인하고 권한 확인

    GitHub에 디바이스 플로우로 한 번 로그인합니다. owner가 PGARD GitHub App을 설치하면, PGARD가 다섯 가지를 확인하고 부족한 것을 알려 줍니다.

    pgard login pgard project verify
  3. 로컬에서 검사하고 결과 보기

    코드와 Git 이력을 내 컴퓨터에서 검사합니다. 결과는 터미널, 전체 화면 패널, 로컬 대시보드에서 볼 수 있습니다.

    pgard scan --panels pgard dashboard

02

직접 보기.

이 저장소를 빌드해서 얻은 실제 출력입니다. 보기를 골라 보세요.

pgard --help
$ pgard --help
pgard - local security checks for GitHub projects you are authorized to scan

Usage:
  pgard                         interactive menu (arrow keys, Enter, Esc, ?)
  pgard project verify          check repository, GitHub identity, owner approval,
                                current access and merged contribution
  pgard scan                    code and configuration + Git history
  pgard scan code               current code and configuration
  pgard scan history            Git history and tracked files (secrets, risky files)
  pgard scan web [--port N]     anonymous read-only checks of a local HTTP service
  pgard scan all [--port N]     code + history + local HTTP service
  pgard dashboard [--target-port N]
                                start the local web dashboard
  pgard rules list [--language js|ts|react|vue|go|java|kotlin] [--lang en|ko]
                                supported rules and unsupported areas
  pgard history clear --all | --repo owner/name
                                delete stored scan results (all, or one repository)
  pgard baseline set [--from-current] | show | clear
                                keep a scan as this repository's baseline; later
                                scans list matching findings under "In baseline"
  pgard doctor                  diagnose the environment (not an authorization)
  pgard advisories update       download public OSV vulnerability data (npm, Go)
                                to this computer; the only non-GitHub download
  pgard login                   sign in to GitHub once and save it in the OS keychain
  pgard logout                  remove the saved GitHub sign-in from the OS keychain
  pgard --help | <command> --help
  pgard --version

The target is always the Git root of the current directory. Every scan re-runs the
authorization gate; only the GitHub sign-in is reused. Code and results are
processed locally; PGARD contacts GitHub for sign-in and repository metadata only.
GitHub pages open in the browser automatically when stdout is a terminal; pass
--no-browser to scan, project verify, login or dashboard to only print the links.

Exit codes:
  0    requested scope completed (findings may exist)
  2    invalid command, option or value
  3    repository, authorization or contribution check failed
  4    part of the scan or the report export failed
  5    internal error
  130  cancelled
  143  terminated by SIGTERM while the panel view was open

도움말과 규칙 목록은 빌드한 CLI의 실제 출력입니다(오프라인, 로그인 없음, 영어 원문). 검사 결과와 패널 보기는 저장소의 테스트 스냅숏에서 가져온 것으로, 가상의 프로젝트에 대한 예시 데이터이며 일부는 ...로 줄였습니다. 실제 저장소를 검사한 결과가 아닙니다.

03

기능.

지금 들어 있는 기능입니다. 각 설명은 README와 일치합니다.

코드, 이력, 로컬 웹

검사 영역 세 가지를 검사마다 고릅니다. 결과에는 무엇을 검사했고 무엇을 검사하지 못했는지가 함께 나옵니다.

언어

JavaScript, TypeScript, React, Vue, Go. Java와 Kotlin은 SQL, 명령 실행, 경로 규칙만. Python과 PHP는 아직 분석하지 않습니다.

OWASP, CWE, CERT

규칙은 OWASP Top 10 2025와 CWE Top 25 2025에, 해당하면 SEI CERT Java 규칙에 연결됩니다. 매핑은 “안전”이라고 말하지 않습니다.

SARIF, JSON, HTML, PDF

스크립트와 코드 스캐닝용 기계 판독 출력, 읽고 공유할 수 있는 보고서. 규칙 설명과 보고서 제목은 한국어 또는 영어, 스캔 근거는 영어로 남습니다.

CLI 패널

pgard scan --panels는 터미널에서 읽기 전용 전체 화면을 엽니다: 개요, 차트, 검사 범위, 발견 항목.

로컬 대시보드

pgard dashboard는 비공개 세션 토큰과 함께 127.0.0.1에서 로컬 웹 대시보드를 실행합니다. 어디에도 호스팅되지 않습니다.

베이스라인과 이력

한 번의 검사를 베이스라인으로 두면 이후 검사가 새로 생긴 항목을 강조합니다. 저장된 결과는 내 컴퓨터에만 있으며 지울 수 있습니다.

증분 검사

다시 검사할 때는 바뀐 부분만 보고, 결과에 그렇게 표시합니다. --full은 전부 다시 검사합니다.

권한 확인 절차

검사할 때마다 다섯 가지 확인을 다시 합니다. 건너뛰는 옵션은 없습니다.

04

무엇을 검사하나.

세 영역 중에서 검사마다 고르고, 실행되는 규칙은 언어에 따라 다릅니다. 전체 목록은 pgard rules list로 볼 수 있습니다.

code

코드

현재 소스 코드와 설정입니다.

  • SQL 인젝션, XSS, SSRF, OS 명령 실행, 경로 조작(path traversal)
  • 취약하거나 코드에 박힌 암호화 키, 해시하지 않은 비밀번호, 쿠키 플래그, CSRF, 로그인 경로의 요청 횟수 제한 부재
  • 작업 트리를 훑으며, 빌드 산출물과 의존성 디렉터리는 건너뛰고 그 목록을 알려 줍니다

history

Git 이력

커밋된 시크릿을 과거부터 현재까지 찾습니다.

  • 커밋된 .env 파일
  • 추적 중인 파일의 시크릿, 그리고 이력에만 남은 시크릿
  • 시크릿 값은 모든 출력에서 가려집니다

web

내 로컬 웹 서비스

사용자가 127.0.0.1에서 실행 중인 서비스만, 직접 확인한 뒤에만 검사합니다.

  • 익명 GET과 HEAD 요청만 보내며 폼 제출은 하지 않습니다
  • 보안 헤더, 쿠키 플래그, 자격 증명을 허용하는 CORS, 버전 노출, 디렉터리 목록, 노출된 /.env와 /.git
  • 한도: 페이지 20개, 깊이 2, 요청당 5초, 전체 60초

언어와 검사 분류

언어 분류
JavaScript, TypeScript SQL 인젝션, XSS, SSRF, 명령 실행, 경로 조작, 암호화, 비밀번호 저장, 쿠키, CSRF, 요청 횟수 제한
React, Vue dangerouslySetInnerHTML과 v-html의 XSS, 그리고 JavaScript/TypeScript 규칙
Go SQL 인젝션(database/sql, GORM), 명령 실행, 경로 조작, SSRF, 암호화, 쿠키
Java, Kotlin 세 가지 분류만 검사합니다: SQL 인젝션, 명령 실행, 경로 조작(MyBatis 매퍼 XML 포함). 그 밖의 분류는 아직 검사하지 않습니다.
Python, PHP 파일은 인식하지만 아직 분석하지 않습니다. 검사 범위에는 미검사로 표시됩니다.

표준 매핑 현황은 OWASP Top 10 2025 분류와 CWE Top 25 2025 항목마다 규칙 실행됨, 규칙 일부 실행, 실행 안 됨, 규칙 없음으로만 표시합니다. 안전하다고 말하지 않으며 녹색으로 표시하지도 않습니다.

05

연동과 출력.

PGARD는 파일과 출력 스트림을 만듭니다. 어디로 보낼지는 사용자가 정하며 PGARD는 아무것도 업로드하지 않습니다.

SARIF → 코드 스캐닝

표준 출력으로 SARIF 2.1.0을 내보냅니다. 로컬 검사가 종료 코드 0으로 끝난 뒤, 예를 들어 gh api로 GitHub 코드 스캐닝에 직접 올리세요. 정확한 명령은 README에 있습니다. CI 러너는 권한 확인을 통과할 수 없으므로 CI 워크플로 예시는 없습니다. 종료 코드 3, 4, 5일 때는 올리지 마세요. 부분 검사 결과를 올리면 검사하지 않은 영역의 경고가 닫힐 수 있습니다. README: SARIF 출력

pgard scan --format sarif > pgard.sarif

스크립트용 JSON

가려 처리된 결과만 표준 출력으로 나가고 진행 상황과 안내는 표준 오류로 나가므로 파일이 올바른 JSON입니다. 스키마는 문서화되어 있고 버전이 있습니다. 결과 스키마

pgard scan --format json > result.json

HTML·PDF 보고서

가려 처리된 보고서를 한국어 또는 영어로(스캔 근거는 영어) 사용자가 고른 기존 폴더에 저장합니다. 기존 파일은 덮어쓰지 않습니다.

pgard scan --report both --output-dir ./reports

06

권한 확인이 먼저.

PGARD는 사용자에게 검사 권한이 있다는 근거가 있을 때만 저장소를 검사합니다.

검사할 때마다 CLI와 대시보드에서 다섯 가지 확인을 처음부터 다시 합니다. 건너뛰는 옵션도, 이전 승인을 재사용하는 일도 없습니다. 근거가 없거나 불분명하면 검사를 막고(종료 코드 3) 어떤 확인이 왜 실패했는지 알려 줍니다.

  1. 저장소현재 디렉터리가 올바른 이력을 가진 Git 저장소 루트이고, github.com 원격이 하나로 분명해야 합니다.
  2. GitHub 신원GitHub 디바이스 플로우로 로그인하거나, OS 키체인에 저장된 로그인을 재사용합니다.
  3. Owner 승인저장소 owner가 PGARD GitHub App을 설치했어야 합니다. 조직 저장소라면 사용자가 조직의 활성 owner여야 합니다.
  4. 현재 접근 권한지금 최소한 읽기 권한이 있다고 GitHub가 알려 주어야 합니다.
  5. 기여owner는 기여를 따로 증명하지 않아도 되지만, 로컬 이력이 기본 브랜치와 커밋을 공유해야 합니다. 그 외의 사용자는 병합된 풀 리퀘스트 또는 검증된 서명 커밋이 필요합니다.

왜 이렇게 하나.

PGARD는 자기 프로젝트를 점검하는 사람을 위한 도구입니다. 보안 검사 도구는 남의 코드를 들여다보는 데도 쓸 수 있으므로, 사용자와 owner의 승인에 연결할 수 없는 대상은 매번 검사하지 않습니다. 막힌 경우에는 해결 방법을 안내합니다.

GitHub App.

로그인은 디바이스 플로우로 PGARD GitHub App을 통해 이루어집니다. 앱에는 공개 client id가 내장되어 있고 PGARD에는 client secret이 없습니다. owner 계정에 앱을 설치하는 것이 곧 owner의 승인이며, PGARD가 대신 설치할 수는 없습니다. 설치만 빠져 있다면 설치 링크를 출력하고 최대 10분 동안 기다린 뒤 다섯 가지 확인을 처음부터 다시 합니다.

07

로컬 우선.

코드, 이력, 결과는 사용자 컴퓨터에서 처리됩니다.

내 컴퓨터에 머무는 것

  • 소스 코드, Git 이력, 검사 결과
  • 저장된 결과: 저장소별 최근 20회, 90일, macOS·Linux에서는 소유자만 읽을 수 있는 권한. --no-store로 끌 수 있고 pgard history clear --all로 지웁니다
  • GitHub 로그인은 OS 키체인에 저장되며 파일에 쓰거나 출력하지 않습니다
  • 내보낸 보고서는 사용자가 고른 위치에만 저장됩니다

네트워크로 나가는 것

  • 검사 중 GitHub: 로그인과 권한 확인에 필요한 메타데이터(신원, 앱 설치 여부, 조직 멤버십, 접근 권한, 기여 내역). 기여를 확인하려고 로컬 커밋의 SHA를 보냅니다
  • OSV 내보내기 호스트: 사용자가 직접 pgard advisories update를 실행할 때만, 공개 취약점 데이터를 내려받습니다. 업로드하는 것은 없습니다
  • 루프백에 한정: 권한 확인이 통과한 뒤 발견된 각 로컬 포트에 GET / 한 번씩, 서비스 정체를 보여 주기 위해

이 웹사이트(pgard.dev)는 정적 페이지일 뿐입니다. 아무것도 검사하지 않고, 데이터를 수집하지 않으며, 로그인이나 업로드 기능이 없습니다. 이 사이트는 대시보드가 아닙니다. 대시보드는 사용자 컴퓨터에서 실행됩니다.

08

솔직한 한계.

짧고 솔직하게. PGARD는 사전 출시 버전입니다.

09

누구를 위한 도구인가.

자신이 권한을 가진 코드를 검사하는 사람들.

푸시 전에 확인하는 개인 개발자

내 프로젝트의 작업 트리와 Git 이력을 커밋하지 않은 파일까지 검사합니다. 다시 검사할 때는 바뀐 부분만 다시 읽습니다.

자기 저장소를 점검하는 팀

베이스라인을 두어 새로 생긴 발견 항목이 눈에 띄게 하고, 로컬 검사 뒤에 SARIF를 직접 코드 스캐닝에 올릴 수 있습니다. 조직 저장소는 조직 owner가 검사할 수 있습니다.

보안 코딩 공부

발견 항목마다 위치, 가려 처리된 근거, 조치 방법, 연결된 OWASP·CWE·CERT 항목 링크가 함께 나옵니다.

10

무료 오픈소스.

값을 매길 것이 없어서 가격 섹션도 없습니다.

소스 보기MIT 라이선스

11

설치.

Node.js 22.23.4, 24.22.1 또는 26.12.1(또는 더 새로운 패치), Git, macOS·Linux·Windows.

npm아직 배포 전사용 가능

npm install -g pgard
npx pgard doctor
npm install -g pgard npx pgard doctor

첫 릴리스 이후에 사용할 수 있으며 여기서는 참고용이라 복사할 수 없습니다. 그 전에는 npm install -g pgard가 pgard 명령이 없는 자리표시 패키지만 설치합니다.

Homebrew아직 배포 전사용 가능

brew tap jadenmeister/pgard brew install pgard
brew tap jadenmeister/pgard brew install pgard

한 줄로도 가능: brew install jadenmeister/pgard/pgard

tap은 첫 릴리스와 함께 만들어지며, 그 전까지 이 명령은 참고용입니다.

소스에서 빌드지금 가능

git clone https://github.com/JadenMeister/pgard.git cd pgard npm ci npm run build

선택: npm link -w @pgard/cli 로 pgard를 PATH에 올릴 수 있습니다. 아니면 node apps/cli/dist/bin/pgard.js 를 실행하세요.

처음 실행

검사할 프로젝트의 루트에서 실행하세요.

pgard doctor pgard login pgard project verify pgard scan

12

FAQ

내 코드가 내 컴퓨터를 벗어나나요?

아니요. 코드, Git 이력, 결과는 사용자 컴퓨터에서 처리되며 업로드되지 않습니다. 검사 중에는 로그인과 권한 확인에 필요한 메타데이터(기여 확인을 위한 로컬 커밋의 SHA 포함)를 위해서만 GitHub에 접속합니다. 그 외의 접속 대상은 OSV 내보내기 호스트뿐이며, 사용자가 직접 pgard advisories update를 실행할 때만 공개 데이터를 내려받고 아무것도 올리지 않습니다.

왜 GitHub 로그인이 필요한가요?

검사 권한이 있음을 증명하기 위해서입니다. PGARD는 GitHub 신원, owner가 PGARD GitHub App을 설치했는지, 지금 접근 권한이 있는지, 저장소의 owner이거나 기여했는지를 확인합니다. 토큰은 OS 키체인에 저장되며 파일에는 저장되지 않습니다.

어떤 저장소를 검사할 수 있나요?

내 저장소는 내 계정에 PGARD GitHub App을 설치한 뒤에 가능합니다(PGARD가 안내합니다). 다른 사람의 개인 저장소는 owner가 앱을 설치했고, 내게 현재 읽기 접근 권한이 있으며, 기본 브랜치에 병합된 풀 리퀘스트 또는 검증된 서명 커밋이 있을 때만 가능합니다. 조직 저장소는 내가 조직의 활성 owner이고 앱이 해당 저장소에 설치되어 있을 때만 가능합니다. 원격 저장소는 검사하지 않으며, 대상은 항상 현재 디렉터리의 Git 루트입니다.

결과가 깨끗하면 안전하다는 증거인가요?

아니요. 발견 항목은 신호이고 탐지는 완전하지 않으며, 발견 없음이 안전을 뜻하지 않습니다. 모든 결과에는 검사하지 못한 부분이 나오고, 표준 매핑 현황은 한 분류의 약점 중 규칙이 있는 것이 얼마나 적은지 보여 줍니다.

Python과 PHP는요?

Python과 PHP 파일은 인식하지만 아직 분석하지 않으며, 검사 범위에 미검사로 표시됩니다. Java와 Kotlin은 SQL 인젝션, 명령 실행, 경로 조작만 검사합니다.

Windows에서도 동작하나요?

네. macOS, Linux, Windows를 지원하며 CI가 세 환경에서 전체 테스트를 실행합니다. Windows에서는 로그인이 자격 증명 관리자에 저장됩니다. 예전 콘솔 창(legacy conhost)과 화면 표시(글꼴, 색, 문자)는 사용자가 직접 확인한 적이 없습니다.

CI에서 쓸 수 있나요?

지금은 어렵습니다. 모든 검사에는 CI 러너에 없는 GitHub 로그인이 필요해서, 러너에서는 차단된 결과만 나옵니다. 가능한 방법: 로컬에서 PGARD를 실행하고 --format json 또는 --format sarif 출력과 종료 코드(0 완료, 3 차단, 4 부분 완료)를 직접 만든 스크립트에서 사용하세요.

호스팅형 스캐너와 무엇이 다른가요?

PGARD는 내 컴퓨터에서 실행되고 아무것도 업로드하지 않으므로 코드가 어떤 서비스로도 복사되지 않습니다. 대신 직접 실행해야 하고, 호스팅된 대시보드나 상시 모니터링은 없으며, 검사해도 되는지 GitHub에 확인합니다.

의존성의 알려진 CVE도 검사하나요?

아직 아닙니다. PGARD는 취약점 데이터베이스를 포함하지 않고 의존성 버전을 권고와 대조하지 않습니다. 락 파일을 읽고 요청 시 공개 OSV 데이터를 내려받을 수는 있으며, 이는 이후 검사를 위한 준비 단계입니다.

PGARD의 취약점은 어떻게 제보하나요?

공개 이슈가 아니라 비공개로 제보해 주세요. 저장소의 Security 탭에서 Report a vulnerability 버튼을 사용하세요. 범위는 보안 정책을 참고하세요. 현상금은 없습니다.

13

앞으로의 방향.

약속이 아니라 주제입니다. 일정은 없고 계획은 바뀔 수 있습니다.

열린 이슈 보기

14

커뮤니티와 기여.

PGARD는 GitHub에서 공개적으로 개발됩니다. 뉴스레터도 서버도 없으며, 소식은 GitHub에서 확인하세요.