코드, 이력, 로컬 웹
검사 영역 세 가지를 검사마다 고릅니다. 결과에는 무엇을 검사했고 무엇을 검사하지 못했는지가 함께 나옵니다.
오픈소스 · MIT · 사전 출시
내 프로젝트의 보안 스캐너 — 코드, Git 이력, 로컬 웹을 내 컴퓨터에서 점검합니다. 검사 권한이 있는 GitHub 저장소만 검사하며, 검사할 때마다 이를 다시 확인하고, 코드와 결과를 업로드하지 않습니다.
설치
npm install -g pgard사전 출시 첫 릴리스 준비 중입니다. 지금은 소스에서 빌드해 사용하세요.
git clone https://github.com/JadenMeister/pgard.git && cd pgard && npm ci && npm run build01
세 단계, 모두 터미널에서.
npm 또는 Homebrew로 설치합니다.
첫 릴리스 준비 중입니다. 지금은 소스에서 빌드하세요.
npm install -g pgard git clone https://github.com/JadenMeister/pgard.git cd pgard npm ci npm run buildGitHub에 디바이스 플로우로 한 번 로그인합니다. owner가 PGARD GitHub App을 설치하면, PGARD가 다섯 가지를 확인하고 부족한 것을 알려 줍니다.
pgard login pgard project verify코드와 Git 이력을 내 컴퓨터에서 검사합니다. 결과는 터미널, 전체 화면 패널, 로컬 대시보드에서 볼 수 있습니다.
pgard scan --panels pgard dashboard02
이 저장소를 빌드해서 얻은 실제 출력입니다. 보기를 골라 보세요.
$ 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
$ pgard rules list --language java
pgard 0.1.0 - detection criteria 2026.10-mvp.4
Language filter: java (rules for any language are included)
Code rules (current files)
PG-CMD-003 high OS command built from dynamic strings in Java/Kotlin (Runtime.exec, ProcessBuilder, Commons Exec) [java, kotlin]
PG-PATH-002 high File path from request input or an archive entry used in Java/Kotlin file access (path traversal, zip slip) [java, kotlin]
PG-SQL-005 high SQL built from dynamic strings in Java/Kotlin JDBC, JPA/Hibernate or MyBatis code [java, kotlin]
Git history rules
PG-HYGIENE-001 info Dependency directory committed to Git [any]
PG-SECRET-001 high Environment file committed to Git [any]
PG-SECRET-002 high Secret in a tracked file [any]
PG-SECRET-003 high Secret found in Git history [any]
Local HTTP rules (anonymous GET, any language)
PG-WEB-001 low Content-Security-Policy header is missing
PG-WEB-002 low Clickjacking protection header is missing
PG-WEB-003 info X-Content-Type-Options: nosniff is missing
PG-WEB-004 info Referrer-Policy header is missing
PG-WEB-005 low Cookie is set without HttpOnly
PG-WEB-006 low Cookie is set without SameSite
PG-WEB-007 info Cookie is set without Secure
PG-WEB-008 medium CORS allows any origin together with credentials
PG-WEB-009 high CORS reflects an arbitrary Origin or trusts `null` with credentials
PG-WEB-010 low Server software version is disclosed
PG-WEB-011 medium Directory listing is enabled
PG-WEB-012 high A .env file is served over HTTP
PG-WEB-013 high The .git directory is served over HTTP
Not covered in this version
- Direct database connections
- Docker / container configuration
- Performance and load testing
- Remote (non-loopback) web services
- Authenticated (logged-in) web browsing
- Form submission and other state-changing requests
- Known-vulnerability (CVE/advisory) lookups for dependencies: PGARD ships no vulnerability database
$ pgard scan --lang ko
PGARD 검사 결과 - 부분 완료 - 요청한 영역 일부가 끝까지 실행되지 않았습니다
저장소 owner/name @ abcdef123456 - 범위: code, history
요약
영역 요청 2 — 완료 1, 부분 완료 1 (선택 안 함 1)
규칙 규칙 3개 실행됨 (부분 완료 영역에서 1개)
규칙별 최대 검사 대상 파일 152개, 커밋 340개
소요 시간 5.0초
발견 항목 심각도별 (총 3건)
치명적 1
높음 1
보통 1
낮음 0
정보 0
...
발견 항목 (3건): 확인됨 1, 의심 2 (검토 필요)
[치명적] User input concatenated into SQL (확인됨)
src/api/users.ts:3 PG-SQL-001 - 신뢰도 보통
근거: req.query -> concat -> query()
조치: Use parameters
표준:
A05:2025 Injection https://top10.owasp.org/2025/A05_2025-Injection/
CWE-89 Improper Neutralization of Special El... https://cwe.mitre.org/data/definitions/89.html
...
검사 범위
[완료] source:typescript (완료)
[부분 완료] history:commits (부분 완료)
[선택 안 함] web:anonymous (선택 안 함)
표준 매핑 현황 (OWASP Top 10 2025)
...
[규칙 실행됨] A05 Injection - 매핑된 CWE 37개 중 3개에 규칙이 있음 (PG-SQL-001, PG-XSS-001)
...
CWE Top 25 2025: 규칙 실행됨 2, 규칙 일부 실행 0, 실행 안 됨 4, 규칙 없음 19
규칙 실행됨은 매핑된 규칙이 이번 검사에서 끝까지 실행되었다는 뜻입니다. 프로젝트가 안전하다거나 그 분류를 모두 다뤘다는 뜻이 아닙니다. 분류에 속한 CWE 중 규칙이 있는 개수를 확인하세요. 항목별 전체 내용: --format json (standardsCoverage, ruleStats).
PGARD는 취약점 데이터베이스를 포함하거나 조회하지 않습니다. 발견 항목은 코드 자체(쿼리문, 서버 코드, 설정), Git 이력, 그리고 선택한 경우 로컬 HTTP 검사에서 나옵니다. 의존성 버전은 알려진 취약점과 대조하지 않습니다.
PGARD 패널 owner/name @ abcdef123456 부분 완료 - 요청한...
[개요] 차트 검사 범위 발견 항목 (12)
요약
영역 요청 3 - 완료 1, 부분 완료 1,
미검사 1 (선택 안 함 1)
규칙 규칙 2개 실행됨 (부분 완료 영역에서
1개)
규칙별 최대 검사 대상 파일 152개, 커밋 500개
소요 시간 5.0초
발견 항목 심각도별 (총 12건)
치명적 1
높음 4
보통 4
낮음 2
정보 1
Tab: 패널 위/아래: 스크롤 ?: 도움말 Esc: 뒤로
PGARD 패널 owner/name @ abcdef123456 부분 완료 - 요청한...
개요 [차트] 검사 범위 발견 항목 (12)
OWASP Top 10 2025 분류별
A01 Broken Access Control 4
A05 Injection 4
OWASP 매핑 없음 4
영역별
코드 11
이력 1
웹 1
Tab: 패널 위/아래: 스크롤 ?: 도움말 Esc: 뒤로
PGARD 패널 owner/name @ abcdef123456 부분 완료 - 요청한...
개요 차트 [검사 범위] 발견 항목 (12)
검사 범위
[완료] source:typescript (완료)
[부분 완료] history:secrets (부분 완료)
(Only the last 500 commits were read because the
repository history is very long.)
[미검사] web:anonymous (미검사)
(No confirmed local web target.)
[선택 안 함] dependencies:npm (선택 안 함)
Tab: 패널 위/아래: 스크롤 ?: 도움말 Esc: 뒤로
PGARD 패널 owner/name @ abcdef123456 부분 완료 - 요청한...
개요 차트 검사 범위 [발견 항목 (12)]
> [치명적] 확인됨 src/module1/handler.ts:11
[높음] 의심 config/.env (commit 0123456789ab)
[높음] 의심 src/module11/handler.ts:21
[높음] 의심 src/module2/handler.ts:12
[높음] 의심 (억제됨) src/module4/handler.ts:14
[보통] 의심 http://127.0.0.1:3000/admin
[보통] 의심 src/module12/handler.ts:22
[보통] 의심 src/module5/handler.ts:15
[보통] 의심 (기준선) src/module7/handler.ts:17
[낮음] 의심 src/module9/handler.ts:19
[낮음] 참고 src/module8/handler.ts:18
[정보] 참고 src/module10/handler.ts:20
Tab: 패널 위/아래: 스크롤 ?: 도움말 Esc: 뒤로
pgard scan --panels --lang ko — 터미널의 읽기 전용 전체 화면 (테스트 예시, 60x20)
도움말과 규칙 목록은 빌드한 CLI의 실제 출력입니다(오프라인, 로그인 없음, 영어 원문). 검사 결과와 패널 보기는 저장소의 테스트 스냅숏에서 가져온 것으로, 가상의 프로젝트에 대한 예시 데이터이며 일부는 ...로 줄였습니다. 실제 저장소를 검사한 결과가 아닙니다.
03
지금 들어 있는 기능입니다. 각 설명은 README와 일치합니다.
검사 영역 세 가지를 검사마다 고릅니다. 결과에는 무엇을 검사했고 무엇을 검사하지 못했는지가 함께 나옵니다.
JavaScript, TypeScript, React, Vue, Go. Java와 Kotlin은 SQL, 명령 실행, 경로 규칙만. Python과 PHP는 아직 분석하지 않습니다.
규칙은 OWASP Top 10 2025와 CWE Top 25 2025에, 해당하면 SEI CERT Java 규칙에 연결됩니다. 매핑은 “안전”이라고 말하지 않습니다.
스크립트와 코드 스캐닝용 기계 판독 출력, 읽고 공유할 수 있는 보고서. 규칙 설명과 보고서 제목은 한국어 또는 영어, 스캔 근거는 영어로 남습니다.
pgard scan --panels는 터미널에서 읽기 전용 전체 화면을 엽니다: 개요, 차트, 검사 범위, 발견 항목.
pgard dashboard는 비공개 세션 토큰과 함께 127.0.0.1에서 로컬 웹 대시보드를 실행합니다. 어디에도 호스팅되지 않습니다.
한 번의 검사를 베이스라인으로 두면 이후 검사가 새로 생긴 항목을 강조합니다. 저장된 결과는 내 컴퓨터에만 있으며 지울 수 있습니다.
다시 검사할 때는 바뀐 부분만 보고, 결과에 그렇게 표시합니다. --full은 전부 다시 검사합니다.
검사할 때마다 다섯 가지 확인을 다시 합니다. 건너뛰는 옵션은 없습니다.
04
세 영역 중에서 검사마다 고르고, 실행되는 규칙은 언어에 따라 다릅니다. 전체 목록은 pgard rules list로 볼 수 있습니다.
code
현재 소스 코드와 설정입니다.
history
커밋된 시크릿을 과거부터 현재까지 찾습니다.
web
사용자가 127.0.0.1에서 실행 중인 서비스만, 직접 확인한 뒤에만 검사합니다.
| 언어 | 분류 |
|---|---|
| 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 2.1.0을 내보냅니다. 로컬 검사가 종료 코드 0으로 끝난 뒤, 예를 들어 gh api로 GitHub 코드 스캐닝에 직접 올리세요. 정확한 명령은 README에 있습니다. CI 러너는 권한 확인을 통과할 수 없으므로 CI 워크플로 예시는 없습니다. 종료 코드 3, 4, 5일 때는 올리지 마세요. 부분 검사 결과를 올리면 검사하지 않은 영역의 경고가 닫힐 수 있습니다. README: SARIF 출력
pgard scan --format sarif > pgard.sarif가려 처리된 결과만 표준 출력으로 나가고 진행 상황과 안내는 표준 오류로 나가므로 파일이 올바른 JSON입니다. 스키마는 문서화되어 있고 버전이 있습니다. 결과 스키마
pgard scan --format json > result.json가려 처리된 보고서를 한국어 또는 영어로(스캔 근거는 영어) 사용자가 고른 기존 폴더에 저장합니다. 기존 파일은 덮어쓰지 않습니다.
pgard scan --report both --output-dir ./reports07
코드, 이력, 결과는 사용자 컴퓨터에서 처리됩니다.
이 웹사이트(pgard.dev)는 정적 페이지일 뿐입니다. 아무것도 검사하지 않고, 데이터를 수집하지 않으며, 로그인이나 업로드 기능이 없습니다. 이 사이트는 대시보드가 아닙니다. 대시보드는 사용자 컴퓨터에서 실행됩니다.
08
짧고 솔직하게. PGARD는 사전 출시 버전입니다.
09
자신이 권한을 가진 코드를 검사하는 사람들.
내 프로젝트의 작업 트리와 Git 이력을 커밋하지 않은 파일까지 검사합니다. 다시 검사할 때는 바뀐 부분만 다시 읽습니다.
베이스라인을 두어 새로 생긴 발견 항목이 눈에 띄게 하고, 로컬 검사 뒤에 SARIF를 직접 코드 스캐닝에 올릴 수 있습니다. 조직 저장소는 조직 owner가 검사할 수 있습니다.
발견 항목마다 위치, 가려 처리된 근거, 조치 방법, 연결된 OWASP·CWE·CERT 항목 링크가 함께 나옵니다.
10
값을 매길 것이 없어서 가격 섹션도 없습니다.
11
Node.js 22.23.4, 24.22.1 또는 26.12.1(또는 더 새로운 패치), Git, macOS·Linux·Windows.
npm install -g pgard npx pgard doctor npm install -g pgard npx pgard doctor첫 릴리스 이후에 사용할 수 있으며 여기서는 참고용이라 복사할 수 없습니다. 그 전에는 npm install -g pgard가 pgard 명령이 없는 자리표시 패키지만 설치합니다.
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 scan12
아니요. 코드, Git 이력, 결과는 사용자 컴퓨터에서 처리되며 업로드되지 않습니다. 검사 중에는 로그인과 권한 확인에 필요한 메타데이터(기여 확인을 위한 로컬 커밋의 SHA 포함)를 위해서만 GitHub에 접속합니다. 그 외의 접속 대상은 OSV 내보내기 호스트뿐이며, 사용자가 직접 pgard advisories update를 실행할 때만 공개 데이터를 내려받고 아무것도 올리지 않습니다.
검사 권한이 있음을 증명하기 위해서입니다. PGARD는 GitHub 신원, owner가 PGARD GitHub App을 설치했는지, 지금 접근 권한이 있는지, 저장소의 owner이거나 기여했는지를 확인합니다. 토큰은 OS 키체인에 저장되며 파일에는 저장되지 않습니다.
내 저장소는 내 계정에 PGARD GitHub App을 설치한 뒤에 가능합니다(PGARD가 안내합니다). 다른 사람의 개인 저장소는 owner가 앱을 설치했고, 내게 현재 읽기 접근 권한이 있으며, 기본 브랜치에 병합된 풀 리퀘스트 또는 검증된 서명 커밋이 있을 때만 가능합니다. 조직 저장소는 내가 조직의 활성 owner이고 앱이 해당 저장소에 설치되어 있을 때만 가능합니다. 원격 저장소는 검사하지 않으며, 대상은 항상 현재 디렉터리의 Git 루트입니다.
아니요. 발견 항목은 신호이고 탐지는 완전하지 않으며, 발견 없음이 안전을 뜻하지 않습니다. 모든 결과에는 검사하지 못한 부분이 나오고, 표준 매핑 현황은 한 분류의 약점 중 규칙이 있는 것이 얼마나 적은지 보여 줍니다.
Python과 PHP 파일은 인식하지만 아직 분석하지 않으며, 검사 범위에 미검사로 표시됩니다. Java와 Kotlin은 SQL 인젝션, 명령 실행, 경로 조작만 검사합니다.
네. macOS, Linux, Windows를 지원하며 CI가 세 환경에서 전체 테스트를 실행합니다. Windows에서는 로그인이 자격 증명 관리자에 저장됩니다. 예전 콘솔 창(legacy conhost)과 화면 표시(글꼴, 색, 문자)는 사용자가 직접 확인한 적이 없습니다.
지금은 어렵습니다. 모든 검사에는 CI 러너에 없는 GitHub 로그인이 필요해서, 러너에서는 차단된 결과만 나옵니다. 가능한 방법: 로컬에서 PGARD를 실행하고 --format json 또는 --format sarif 출력과 종료 코드(0 완료, 3 차단, 4 부분 완료)를 직접 만든 스크립트에서 사용하세요.
PGARD는 내 컴퓨터에서 실행되고 아무것도 업로드하지 않으므로 코드가 어떤 서비스로도 복사되지 않습니다. 대신 직접 실행해야 하고, 호스팅된 대시보드나 상시 모니터링은 없으며, 검사해도 되는지 GitHub에 확인합니다.
아직 아닙니다. PGARD는 취약점 데이터베이스를 포함하지 않고 의존성 버전을 권고와 대조하지 않습니다. 락 파일을 읽고 요청 시 공개 OSV 데이터를 내려받을 수는 있으며, 이는 이후 검사를 위한 준비 단계입니다.
공개 이슈가 아니라 비공개로 제보해 주세요. 저장소의 Security 탭에서 Report a vulnerability 버튼을 사용하세요. 범위는 보안 정책을 참고하세요. 현상금은 없습니다.
13
약속이 아니라 주제입니다. 일정은 없고 계획은 바뀔 수 있습니다.
14
PGARD는 GitHub에서 공개적으로 개발됩니다. 뉴스레터도 서버도 없으며, 소식은 GitHub에서 확인하세요.