Chống spam với reCAPTCHA
Nếu website chạy lâu, bot spam sẽ tự động đăng ký tài khoản. reCAPTCHA giúp ngăn chặn điều này.
Lấy API key
Bước 1: Đăng ký reCAPTCHA
- Truy cập reCAPTCHA admin
- Đăng nhập bằng tài khoản Google
- Click Create (+)
Bước 2: Cấu hình
- Label: Tên website (ví dụ: LCOJ)
- reCAPTCHA type: Chọn reCAPTCHA v2 > "I'm not a robot" Checkbox
- Domains: Nhập domain của bạn (ví dụ:
luyencode.net) - Chấp nhận điều khoản
- Click Submit
Bước 3: Lấy keys
Sau khi tạo, bạn sẽ nhận được:
- Site key: Key công khai
- Secret key: Key bí mật
Cài đặt
Với Docker (khuyến nghị)
Bước 1: Thêm vào environment/site.env:
env
RECAPTCHA_PUBLIC_KEY=your_site_key_here
RECAPTCHA_PRIVATE_KEY=your_secret_key_hereBước 2: Restart site:
sh
cd lcoj-docker/dmoj
docker compose restart siteVới bare metal
Bước 1: Cài đặt thư viện:
sh
source lcojsite/bin/activate
pip3 install django-recaptcha2Bước 2: Thêm vào local_settings.py:
python
# reCAPTCHA keys
RECAPTCHA_PUBLIC_KEY = 'your_site_key_here'
RECAPTCHA_PRIVATE_KEY = 'your_secret_key_here'
# Thêm vào INSTALLED_APPS
INSTALLED_APPS += (
'snowpenguin.django.recaptcha2',
)Bước 3: Khởi động lại:
sh
supervisorctl restart siteKiểm tra
- Truy cập trang đăng ký
- Bạn sẽ thấy checkbox "I'm not a robot"
- Thử đăng ký để kiểm tra
Tùy chọn nâng cao
reCAPTCHA v3
reCAPTCHA v3 không cần checkbox, tự động phát hiện bot.
Cài đặt:
sh
pip3 install django-recaptchaCấu hình:
python
RECAPTCHA_PUBLIC_KEY = 'your_v3_site_key'
RECAPTCHA_PRIVATE_KEY = 'your_v3_secret_key'
RECAPTCHA_REQUIRED_SCORE = 0.5 # Điểm tối thiểu (0-1)
INSTALLED_APPS += (
'django_recaptcha',
)Tùy chỉnh theme
python
RECAPTCHA_THEME = 'dark' # Hoặc 'light'Test mode
Để test không cần internet:
python
RECAPTCHA_TESTING = True # Chỉ dùng khi developmentXử lý lỗi
reCAPTCHA không hiển thị:
- Kiểm tra domain trong reCAPTCHA admin
- Kiểm tra
RECAPTCHA_PUBLIC_KEY - Xem console browser có lỗi không
Luôn báo lỗi:
- Kiểm tra
RECAPTCHA_PRIVATE_KEY - Kiểm tra server có kết nối internet
- Xem log Docker:
docker compose logs -f site - Xem log bare metal:
supervisorctl tail -f site
Bị block khi test:
- Dùng
RECAPTCHA_TESTING = Truekhi development - Hoặc thêm localhost vào domains trong reCAPTCHA admin
Bảo mật
- Không commit keys vào git
- Lưu keys trong biến môi trường hoặc file riêng
- Định kỳ rotate keys
- Monitor số lượng đăng ký để phát hiện spam
Thống kê
Xem thống kê reCAPTCHA tại reCAPTCHA admin:
- Số request
- Tỷ lệ bot
- Tỷ lệ thành công
