Quét lộ khoá bí mật API
Quét văn bản, file, diff hoặc file ZIP mã nguồn tìm API key, token, khoá riêng, mật khẩu bị lộ bằng hơn 220 luật của gitleaks. Secret được che.
Gửi văn bản (text hoặc body thô) hoặc file: một file mã nguồn, file .gz, một bản diff (chỉ quét dòng được thêm, số dòng theo file mới) hoặc file .zip của cả repository. Bộ quét áp dụng bộ luật mặc định của gitleaks (hơn 220 luật: khoá AWS, GitHub, GitLab, Stripe, Slack, Google, OpenAI, Anthropic, khoá riêng, JWT và nhiều loại khác), được chuyển từ biểu thức Go RE2 sang JavaScript và cập nhật hằng tuần, cộng thêm luật riêng phát hiện mật khẩu trong URL chuỗi kết nối (postgres://user:pass@host). Giống gitleaks, mỗi luật có từ khoá, nhóm secret, ngưỡng entropy Shannon và danh sách bỏ qua (giá trị giữ chỗ như ${VAR}, changeme, khoá ví dụ, node_modules, file lock, ảnh).
Mỗi phát hiện gồm rule_id, mô tả, file, line / column (tính từ 1) và vị trí kết thúc, secret và đoạn khớp đã được che, entropy và mức tin cậy (low với luật khoá chung chung). entropy=true báo thêm các chuỗi dài có entropy cao mà không luật nào khớp. rules giới hạn các luật được chạy. Biểu thức chỉ chạy trên vùng quanh từ khoá, với tổng thời gian giới hạn, nên dữ liệu bất thường không thể làm treo; kết quả có timed_out hoặc slow_rules nếu xảy ra.
Quyền riêng tư: nội dung chỉ được quét trong bộ nhớ, không lưu và không ghi log, secret được che trong kết quả. Dù vậy, khoá đã từng bị dán ở đâu đó vẫn nên được thay mới. Giới hạn: tổng 5 triệu ký tự, mỗi file trong ZIP tối đa 2 MB, tối đa 10.000 file.
Tham số
| Tên | Vị trí | Kiểu | Bắt buộc | Mặc định | |
|---|---|---|---|---|---|
text | body | string | không | Văn bản, mã nguồn hoặc bản diff cần quét (hoặc gửi body text thô). | |
file | body | file | không | File văn bản, .gz, diff hoặc .zip mã nguồn (multipart, hoặc file_base64). | |
filename | body | string | không | Đường dẫn của văn bản, dùng cho luật và danh sách bỏ qua theo đường dẫn (ví dụ config/.env). | |
diff | body | boolean | không | Coi văn bản là bản diff (tự nhận diện). | |
entropy | body | boolean | không | false | Báo thêm các chuỗi entropy cao không khớp luật nào. |
rules | body | string | không | Danh sách id luật cần chạy, phân tách bằng dấu phẩy (mặc định: tất cả). | |
limit | body | number | không | 1000 | Số phát hiện tối đa trả về (1–5000). |
Ví dụ
curl -X POST "https://apibox.io.vn/v1/secret-scan" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"AWS_ACCESS_KEY_ID=AKIAQWERTYUIOPASDFGH\nDATABASE_URL=postgres://admin:S3cr3tP4ssw0rd!@db.example.com:5432/app\n","filename":".env"}'const res = await fetch('https://apibox.io.vn/v1/secret-scan', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"text": "AWS_ACCESS_KEY_ID=AKIAQWERTYUIOPASDFGH\nDATABASE_URL=postgres://admin:S3cr3tP4ssw0rd!@db.example.com:5432/app\n",
"filename": ".env"
}),
});
const data = await res.json();
console.log(data);import requests
res = requests.post(
"https://apibox.io.vn/v1/secret-scan",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"text": "AWS_ACCESS_KEY_ID=AKIAQWERTYUIOPASDFGH\nDATABASE_URL=postgres://admin:S3cr3tP4ssw0rd!@db.example.com:5432/app\n", "filename": ".env"},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/secret-scan');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"text":"AWS_ACCESS_KEY_ID=AKIAQWERTYUIOPASDFGH\\nDATABASE_URL=postgres://admin:S3cr3tP4ssw0rd!@db.example.com:5432/app\\n","filename":".env"}',
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Kết quả trả về
{
"leaks_found": true,
"count": 2,
"files_scanned": 1,
"characters_scanned": 109,
"by_rule": {
"aws-access-token": 1,
"url-credentials": 1
},
"findings": [
{
"rule_id": "aws-access-token",
"description": "Identified a pattern that may indicate AWS credentials, risking unauthorized cloud resource access and data breaches on AWS platforms.",
"file": ".env",
"line": 1,
"column": 19,
"end_line": 1,
"end_column": 38,
"secret_masked": "AKIA**************GH",
"match_masked": "AKIA**************GH",
"entropy": 3.984,
"confidence": "high",
"fingerprint": ".env:aws-access-token:1"
},
{
"rule_id": "url-credentials",
"description": "Password inside a URL / connection string (database, broker, FTP, HTTP basic auth).",
"file": ".env",
"line": 2,
"column": 31,
"end_line": 2,
"end_column": 45,
"secret_masked": "S3***********d!",
"match_masked": "postgres://admin:S3***********d!@db.example.com:5432",
"entropy": 3.507,
"confidence": "high",
"fingerprint": ".env:url-credentials:2"
}
],
"truncated": false,
"rules": {
"count": 222,
"source": "gitleaks default config (MIT)",
"dropped": 0
},
"ms": 5,
"privacy": "The text is scanned in memory and not stored or logged; secrets are masked in the response."
}
Ứng dụng
- Kiểm tra log hoặc ticket hỗ trợ có lộ khoá trước khi dán vào chatbot
- Kiểm tra nhẹ trước khi commit hoặc trong CI trên bản diff, không cần cài công cụ
- Rà soát file ZIP mã nguồn do đối tác bàn giao
- Phát hiện mật khẩu database còn sót trong .env hoặc file cấu hình
Hỏi đáp
Mã nguồn của tôi có bị lưu lại không?
Không. Yêu cầu chỉ được xử lý trong bộ nhớ, không ghi vào kho lưu trữ hay log, và kết quả chỉ chứa secret đã được che.
Kết quả có giống chạy gitleaks không?
Dùng cùng bộ luật mặc định, từ khoá, ngưỡng entropy và danh sách bỏ qua. Luật nào không chuyển được từ RE2 sẽ bị bỏ và được đếm trong rules.dropped (hiện chưa có). API không quét lịch sử git, chỉ quét file bạn gửi.
Vì sao có phát hiện mức tin cậy thấp?
Luật generic-api-key khớp mọi phép gán kiểu key = "chuỗi ngẫu nhiên dài", nên tìm được cả secret không có định dạng riêng nhưng cũng có thể báo nhầm. Các luật theo từng nhà cung cấp có mức tin cậy high.
API liên quan
Tạo mã hash
Tính MD5, SHA-1, SHA-256, SHA-384, SHA-512 và CRC32 của chuỗi hoặc file trong một lần gọi, xuất hex hoặc base64, hỗ trợ ký HMAC.
B64Mã hoá / Giải mã
Mã hoá hoặc giải mã chuỗi sang Base64, Base64URL, hex, URL encode, HTML entity, Unicode escape, ROT13 hay nhị phân chỉ với một lần gọi API.
***Tạo mật khẩu
Tạo mật khẩu ngẫu nhiên an toàn bằng CSPRNG (4–256 ký tự, tối đa 100 cái mỗi lần) hoặc kiểm tra độ mạnh, entropy và thời gian bẻ khoá của mật khẩu.