Kiểm tra mật khẩu API
Chấm điểm mật khẩu 0–4 kèm thời gian bẻ khoá ước tính và gợi ý, kiểm tra mật khẩu có trong các vụ rò rỉ dữ liệu mà không cần gửi mật khẩu đi (k-anonymity).
API kiểm tra mật khẩu ước tính mật khẩu khó đoán đến đâu. Ngoài độ dài và loại ký tự, API tìm những gì kẻ tấn công thử trước tiên: các mật khẩu phổ biến nhất (kể cả kiểu Việt Nam như matkhau, anhyeuem), mật khẩu phổ biến thêm vài chữ số, chuỗi bàn phím và bảng chữ cái (qwerty, 1234, abcd), ký tự lặp, thay chữ bằng ký hiệu (P@ssw0rd) và ngày tháng, năm sinh. Kết quả gồm điểm từ 0 (rất yếu) đến 4 (rất mạnh), entropy ước tính, thời gian bẻ khoá theo bốn kịch bản và cảnh báo, gợi ý để hiển thị cạnh form đăng ký.
API còn đối chiếu với cơ sở dữ liệu Have I Been Pwned gồm hơn 900 triệu mật khẩu đã bị lộ. Chỉ 5 ký tự đầu của mã băm SHA-1 rời khỏi máy chủ của chúng tôi (tìm kiếm theo dải k-anonymity, có padding), nên cả chúng tôi lẫn HIBP đều không biết mật khẩu; mật khẩu đã bị lộ luôn bị chấm 0 điểm. Đặt breach=false để bỏ qua bước này.
Mật khẩu chỉ được xử lý trong bộ nhớ: không lưu, không ghi log, không dùng làm khoá cache. Hãy gửi trong body POST thay vì trên URL.
Tham số
| Tên | Vị trí | Kiểu | Bắt buộc | Mặc định | |
|---|---|---|---|---|---|
password | body | string | có | Mật khẩu (tối đa 256 ký tự). Dùng POST. | |
breach | body | boolean | không | true | false: bỏ qua kiểm tra rò rỉ. |
Ví dụ
curl -X POST "https://apibox.io.vn/v1/password-check" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"password":"anhyeuem2024"}'const res = await fetch('https://apibox.io.vn/v1/password-check', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"password": "anhyeuem2024"
}),
});
const data = await res.json();
console.log(data);import requests
res = requests.post(
"https://apibox.io.vn/v1/password-check",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"password": "anhyeuem2024"},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/password-check');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"password":"anhyeuem2024"}',
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Kết quả trả về
{
"length": 12,
"charsets": {
"lower": true,
"upper": false,
"digits": true,
"symbols": false,
"unicode": false
},
"entropy_bits": 10,
"score": 0,
"strength": "very weak",
"crack_time": {
"online_throttled": "5 hours",
"online": "51 seconds",
"offline_slow_hash": "less than a second",
"offline_fast_hash": "less than a second"
},
"warnings": [
"This password appeared … times in known data breaches: never use it",
"A common password with a few characters added is still easy to guess",
"Dates and years (birthdays) are among the first things attackers try"
],
"suggestions": [
"Mixing character types helps, but length helps more",
"Use a different password for every site, ideally from a password manager"
],
"breach": {
"checked": true,
"found": true,
"count": 1234
},
"note": "The password is not stored or logged. …"
}
Ứng dụng
- Thanh đo độ mạnh mật khẩu ở form đăng ký, đổi mật khẩu
- Chặn mật khẩu đã bị lộ theo khuyến nghị NIST SP 800-63B
- Rà soát bảo mật tài khoản quản trị
- Hướng dẫn người dùng đặt mật khẩu mạnh
Hỏi đáp
Mật khẩu có bị gửi tới Have I Been Pwned không?
Không. Chỉ 5 ký tự hex đầu của mã băm SHA-1 được gửi đi; phần còn lại được so khớp ngay trên máy chủ với danh sách trả về.
Vì sao một cụm từ dài vẫn bị 0 điểm?
Vì nó đã xuất hiện trong các vụ rò rỉ (ví dụ “correct horse battery staple”). Kẻ tấn công luôn thử mật khẩu đã lộ trước, dù dài đến đâu.
Có nên bắt buộc ký tự đặc biệt không?
Độ dài quan trọng hơn. Khuyến nghị hiện nay là tối thiểu 8 (tốt hơn 12+) ký tự, không ép quy tắc thành phần và có kiểm tra rò rỉ — điều API này làm cho bạn.
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.