关于 klaws — Korean compliance risk scanner
klaws 是面向代码库的韩国法律合规风险扫描器,可通过命令行或 MCP 供开发者和编码 Agent 使用。它以本地正则模式匹配发现风险,并将结果关联到 PIPA 等法律条文;扫描结果不构成法律意见。
主要功能
- 01扫描目录或单个源代码文件
- 02覆盖四项韩国法律的风险检测
- 03将发现映射到具体法律条文
- 04查询内置法规或在线获取最新文本
- 05支持命令行及 MCP 服务模式
适用场景
- 01在代码审查前查找个人信息日志风险
- 02检查个人信息处理端点的同意验证
- 03扫描信用信息的加密或遮蔽问题
- 04通过 MCP 查询法规条文及检测器
MCP 相关
作为 MCP 服务,向 AI 编码 Agent 提供目录和文件扫描、检测器列表及法规查询工具。扫描在运行服务的本地文件系统进行,支持设置扫描根目录限制路径范围。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
docker run -i --rm ghcr.io/rostradamus/klaws:0.1.6本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
ghcr.io/rostradamus/klaws:0.1.6stdio工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
klaws
面向代码库的韩国法律合规风险扫描器。扫描源代码,查找可能表明存在韩国法律合规风险的模式,并将扫描结果对应到具体法律条文。它既可作为 MCP 服务运行(AI 编码助手可按需扫描),也可作为独立 CLI 运行。
目前覆盖 PIPA(个人信息保护法)、《网络法》(정보통신망법)、《信用信息法》(신용정보법)和 《电子商务法》(전자상거래법)。
**免责声明:**klaws 用于识别可能的合规风险,以供审查。它不构成法律建议。如需权威指导,请咨询合格的法律顾问。
隐私:klaws 在本地分析代码,不会传输任何内容。唯一的出站网络请求是可选的
--live法律查询,目标为 law.go.kr;不使用该标志时,工具完全离线运行。请参阅隐私与安全。
快速开始
# Scan the current directory with Docker — no install needed
docker run --rm -v "$PWD":/src:ro ghcr.io/rostradamus/klaws scan /src
# ...or, if you installed the binary:
klaws scan ./my-project # scan a directory
klaws scan ./MyService.java # scan a single file
安装
Docker(推荐)
无需工具链——镜像已发布到 GitHub Container Registry,可在 macOS、Linux 和 Windows 上以相同方式运行:
# Scan the current directory (mount it read-only at /src)
docker run --rm -v "$PWD":/src:ro ghcr.io/rostradamus/klaws scan /src
# Pin a version instead of the floating latest tag
docker run --rm -v "$PWD":/src:ro ghcr.io/rostradamus/klaws:0.1.6 scan /src
预编译二进制文件
从最新版本下载适用于你平台的压缩包,解压后将 klaws 移至 PATH 中。
go install
go install github.com/rostradamus/klaws/cmd/klaws@latest
从源代码安装
**要求:**Go 1.23+
git clone https://github.com/rostradamus/klaws.git
cd klaws
go build -o klaws ./cmd/klaws/
验证安装:
klaws --version
用法
扫描
# Scan a directory (default: *.java files)
klaws scan ./src
# Scan specific file types
klaws scan ./src --pattern "*.kt"
# Text output (default is JSON)
klaws scan ./src --format text
# SARIF output (for GitHub code scanning / other tools)
klaws scan ./src --format sarif > klaws.sarif
# Fail the command (exit 1) if any finding is at or above a severity
klaws scan ./src --fail-on HIGH
# Use a custom laws file
klaws scan ./src --laws ./my-laws.yaml
输出示例
klaws scan report
Target: ./testdata
Files: 4
Findings: 7
--- Finding 1 ---
Detector: PIPA-CST-001
Risk: HIGH
Location: testdata/MemberController.java:10
Snippet: @PostMapping("/register")
Message: Endpoint accepts possible personal data without apparent consent
mechanism — may require review under PIPA Article 15
Laws: PIPA-15
--- Finding 2 ---
Detector: PIPA-ENC-001
Risk: HIGH
Location: testdata/MemberEntity.java:11
Snippet: private String residentNumber;
Message: Possible unencrypted personal identifier (residentNumber) — may
require review under PIPA Article 24-2
Laws: PIPA-24-2, PIPA-29
--- Finding 3 ---
Detector: PIPA-LOG-001
Risk: MEDIUM
Location: testdata/UserService.java:11
Snippet: log.info("User registered: " + email);
Message: Possible personal data (email) in log output — may require review
under PIPA Article 29
Laws: PIPA-29
查询法律条文
# Look up from bundled database
klaws law PIPA-15
# Fetch live text from law.go.kr
klaws law PIPA-15 --live
列出检测器
klaws detectors
[
{
"id": "PIPA-LOG-001",
"name": "Personal Data Logging Risk",
"description": "Detects log statements that may contain personal data fields",
"related_laws": ["PIPA-29"]
},
{
"id": "PIPA-ENC-001",
"name": "Unencrypted Personal Data Risk",
"description": "Detects personal identifier fields stored without apparent encryption",
"related_laws": ["PIPA-24-2", "PIPA-29"]
},
{
"id": "PIPA-CST-001",
"name": "Missing Consent Check Risk",
"description": "Detects endpoints accepting personal data without apparent consent verification",
"related_laws": ["PIPA-15"]
}
]
检测器
| ID | 名称 | 检查内容 | 风险 | 相关法律 |
|---|---|---|---|---|
PIPA-LOG-001 | 个人数据日志记录 | 包含个人数据字段名称(邮箱、电话、SSN、密码)的 log.*() 调用 | MEDIUM | PIPA 第 29 条 |
PIPA-ENC-001 | 未加密的个人数据 | 未添加加密注解或调用的敏感标识符字段(居民登记号码、SSN) | HIGH | PIPA 第 24-2、29 条 |
PIPA-CST-001 | 缺少同意检查 | 接收个人数据但未验证同意的 @PostMapping/@PutMapping 端点 | HIGH | PIPA 第 15 条 |
NIA-MKT-001 | 营销消息同意 | 发送广告/营销消息(send/push)时未发现明显的主动同意检查 | MEDIUM | 网络法第 50 条 |
CIA-ENC-001 | 未受保护的信用信息 | 未加密或脱敏的信用/金融标识符字段(卡号、账号、信用评分) | HIGH | 信用信息法第 19 条 |
ECA-RET-001 | 交易记录保留 | 未发现明显的保留或保存处理方式的交易记录字段(订单/付款 ID) | MEDIUM | 电子商务法第 6 条 |
PIPA-RET-001 | 个人数据保留 | 未发现明显的销毁或保留期限处理方式的个人数据字段(邮箱、电话、居民登记号码) | MEDIUM | PIPA 第 21 条 |
PIPA-XBR-001 | 向第三方传输数据 | 向第三方或外部端点发送个人数据(向外部 URL/合作方发起出站调用),但未发现明显的同意检查 | HIGH | PIPA 第 17 条 |
检测器使用基于正则表达式的模式匹配,同时支持英文和韩文字段名称(例如,email/이메일、residentNumber/주민번호、consent/동의)。
MCP 服务
klaws 可作为 MCP 服务运行,向 AI 编码助手提供扫描功能。
klaws serve
可用工具
| 工具 | 描述 |
|---|---|
scan_directory | 扫描目录以查找合规风险 |
scan_file | 扫描单个文件 |
list_detectors | 列出所有可用检测器 |
get_law_reference | 根据 ID 查询韩国法律条款 |
配置
所有客户端都使用相同的启动命令:通过 stdio 运行 klaws serve。请使用二进制文件的绝对路径(运行 which klaws,或在 Windows 上运行 where klaws 查找),如果它位于 PATH 中,也可以直接使用 klaws。不想安装任何内容?请使用下方的 Docker 版本——它适用于任何支持 stdio MCP 服务的客户端。
Claude Code — ~/.claude/settings.json:
{
"mcpServers": {
"klaws": {
"command": "klaws",
"args": ["serve"]
}
}
}
或者通过一条命令添加:
claude mcp add klaws -- klaws serve
Claude Desktop — claude_desktop_config.json(Settings → Developer → Edit Config):
{
"mcpServers": {
"klaws": {
"command": "klaws",
"args": ["serve"]
}
}
}
Cursor — ~/.cursor/mcp.json(或项目中的 .cursor/mcp.json):
{
"mcpServers": {
"klaws": {
"command": "klaws",
"args": ["serve"]
}
}
}
VS Code — .vscode/mcp.json:
{
"servers": {
"klaws": {
"command": "klaws",
"args": ["serve"]
}
}
}
连接后,可以向助手提出类似 “使用 klaws 扫描此目录中的韩国合规风险。” 的请求。
通过 Docker 运行 MCP 服务
无需安装二进制文件——将 command/args 替换为挂载待扫描代码的 docker run 命令。-i 标志会保持 stdin 打开,以供 stdio 传输使用;--scan-root /src 则将扫描范围限制在已挂载的目录中:
{
"mcpServers": {
"klaws": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-v", "/absolute/path/to/your/project:/src:ro",
"ghcr.io/rostradamus/klaws:latest",
"serve", "--scan-root", "/src"
]
}
}
}
让助手扫描 /src 下的路径,例如 “扫描 /src 中的韩国合规风险。”
远程(Streamable HTTP)
默认情况下,klaws serve 使用 stdio(本地)。要通过 HTTP 将其作为远程 MCP 服务运行,请传入 --http:
klaws serve --http :8080
# or via the published container image:
docker run --rm -p 8080:8080 ghcr.io/rostradamus/klaws serve --http :8080
随后,MCP 端点可通过 http://<host>:8080/mcp 访问(Streamable HTTP 传输)。将支持 HTTP 的 MCP 客户端指向该 URL。
保护远程服务
klaws serve --http :8080 \
--auth-token "$(openssl rand -hex 32)" \
--scan-root /workspace
--auth-token <token>— 要求每个 HTTP 请求都携带Authorization: Bearer <token>;未经身份验证的请求会收到401。也可以通过KLAWS_AUTH_TOKEN环境变量提供。仅适用于--http。--scan-root <dir>— 将scan_directory/scan_file限定为<dir>内的路径;对目录外路径的请求会被拒绝。(在 stdio 模式下同样生效。)
注意:
--auth-token提供 Bearer 身份验证,但不提供 TLS。在不受信任的网络中,仍应在 klaws 前方通过反向代理 / 网关终止 TLS。scan_directory和scan_file工具读取的是服务端文件系统(你传入的路径会在运行 klaws 的主机上解析)。要进行远程扫描,请在代码所在的位置运行 klaws(例如,在已检出仓库的 CI 运行器上),并将--scan-root设为该检出目录。get_law_reference和list_detectors工具不依赖文件系统。
内置法律条文
klaws 的二进制文件内置了 4 部韩国法律中的 40 条条文(无需外部文件):
PIPA(개인정보 보호법)— 10 条
| ID | 条文 | 主题 |
|---|---|---|
PIPA-15 | 第 15 条 | 个人信息的收集和使用 |
PIPA-17 | 第 17 条 | 向第三方提供 |
PIPA-18 | 第 18 条 | 限制超出目的范围的使用 |
PIPA-21 | 第 21 条 | 销毁个人信息 |
PIPA-23 | 第 23 条 | 限制敏感信息 |
PIPA-24 | 第 24 条 | 限制唯一识别信息 |
PIPA-24-2 | 第 24-2 条 | 限制居民登记号码 |
PIPA-29 | 第 29 条 | 安全措施义务 |
PIPA-30 | 第 30 条 | 隐私政策 |
PIPA-34 | 第 34 条 | 数据泄露通知 |
网络法(정보통신망법)— 11 条
| ID | 条文 | 主题 |
|---|---|---|
NIA-22 | 第 22 条 | 收集 / 使用个人信息的同意 |
NIA-23 | 第 23 条 | 收集限制 |
NIA-23-2 | 第 23-2 条 | 限制居民登记号码 |
NIA-24 | 第 24 条 | 使用限制 |
NIA-24-2 | 第 24-2 条 | 向第三方提供 |
NIA-27 | 第 27 条 | 安全措施 |
NIA-28 | 第 28 条 | 委托处理个人信息 |
NIA-28-2 | 第 28-2 条 | 数据泄露通知 |
NIA-44 | 第 44 条 | 用户保护 |
NIA-44-7 | 第 44-7 条 | 禁止非法信息 |
NIA-50 | 第 50 条 | 限制传送广告信息 |
信用信息法(신용정보법)— 10 条
| ID | 条文 | 主题 |
|---|---|---|
CIA-15 | 第 15 条 | 收集原则 |
CIA-17 | 第 17 条 | 禁止超出目的范围披露 |
CIA-19 | 第 19 条 | 信用信息系统的安全 |
CIA-20 | 第 20 条 | 信用信息的准确性和时效性 |
CIA-32 | 第 32 条 | 提供 / 使用的同意 |
CIA-33 | 第 33 条 | 个人信用信息的使用 |
CIA-34 | 第 34 条 | 个人信用信息的提供 / 使用 |
CIA-38 | 第 38 条 | 信用信息保护 |
CIA-39 | 第 39 条 | 数据泄露通知 |
CIA-40 | 第 40 条 | 信用信息主体的权利 |
电子商务法(전자상거래법)— 9 条
| ID | 条文 | 主题 |
|---|---|---|
ECA-6 | 第 6 条 | 交易记录的保存 |
ECA-7 | 第 7 条 | 防止操作错误 |
ECA-11 | 第 11 条 | 电子支付的可靠性 |
ECA-13 | 第 13 条 | 提供身份和交易信息 |
ECA-14 | 第 14 条 | 订单确认 |
ECA-17 | 第 17 条 | 撤回权 |
ECA-21 | 第 21 条 | 消费者信息的使用 |
ECA-24 | 第 24 条 | 网络商城安全 |
ECA-26 | 第 26 条 | 消费者信息保护 |
包含完整的韩文条文。使用 --live 可从 law.go.kr 获取最新版本。
隐私与安全
klaws 的设计旨在安全地用于私有代码:
- 仅在本地分析。 扫描仅对你提供的文件进行纯静态模式匹配。源代码绝不会离开你的设备——不会上传、远程记录,也不会发送到任何服务。
- 只有一个可选的出站请求。 klaws 唯一会发起的网络请求是
--live法律查询(CLI)/启用实时获取的get_law_reference(MCP),用于从 law.go.kr 获取公开的法规文本。它仅将法规名称(例如개인정보보호법,根据你查询的条款解析得出)作为搜索查询发送——绝不会发送你的代码。省略--live即可完全离线运行。 - 设计为只读。 klaws 只读取要扫描的文件;绝不会修改你的代码。其 MCP 工具均标注为只读。
- 限制可访问的文件系统范围。 暴露 MCP 服务时,传入
--scan-root <dir>,将scan_directory/scan_file限制在单一目录树内;通过--http提供服务时,使用--auth-token。请参阅保护远程服务。
如需报告漏洞,请参阅 SECURITY.md。
架构
klaws scan ./src
│
▼
FileWalker ──► walks directory, matches glob pattern
│
▼
ScannerService ──► reads each file
│
▼
DetectorRegistry ──► runs all detectors on source code
│
▼
Findings ──► mapped to law provisions
│
▼
Report ──► JSON or text output
路线图
- 更多检测器: 营销信息同意(NIA-MKT-001)(已完成)、未受保护的信用信息(CIA-ENC-001)(已完成)、交易记录保留(ECA-RET-001)(已完成)、个人数据保留(PIPA-RET-001)(已完成)、第三方/跨境传输(PIPA-XBR-001)(已完成)
- 多语言: Python、JavaScript/TypeScript 检测模式
- 更多韩国法律: 《电子商务法》(전자상거래법)消费者保护规则 (已完成)、《网络法》(정보통신망법)(已完成)、《信用信息法》(신용정보법)(已完成)
- CI/CD: GitHub Action、SARIF 输出、严重性阈值 (已完成)
- 配置: 通过配置文件自定义模式规则
GitHub Action(CI)
klaws 提供了一个复合 Action,可扫描代码并生成 SARIF 报告。你可以将报告上传到 GitHub 代码扫描功能,让发现的问题直接显示在拉取请求中以及 Security 选项卡内。
# .github/workflows/klaws.yml
name: klaws compliance scan
on: [pull_request]
permissions:
contents: read
security-events: write # required to upload SARIF
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- id: klaws
uses: rostradamus/klaws@v0 # moving major tag; add `version: vX.Y.Z` below to pin the klaws binary
with:
path: ./src
pattern: "*.java"
fail-on: none # or MEDIUM / HIGH to gate the PR
- name: Upload SARIF
if: always() # upload even if fail-on tripped the step
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: ${{ steps.klaws.outputs.sarif }}
设置 fail-on: HIGH(或 MEDIUM),即可在存在达到或超过该严重性级别的问题时,让检查导致 PR 失败。上传步骤中的 if: always() 可确保即使检查门禁失败,SARIF 仍会发布。
发布
维护者:有关如何创建版本并发布到 MCP 注册表,请参阅 RELEASE.md。
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。