L o a d i n g
Пошаговое руководство: Как подключить Google reCAPTCHA v3 к Django-сайту для защиты от ботов Сайты

Защита веб-приложений от автоматических ботов — одна из ключевых задач современной веб-разработки. Google reCAPTCHA v3 предлагает эффективное решение: она анализирует поведение пользователя в фоновом режиме, не требуя кликов по картинкам или ввода текста. В этой статье мы подробно разберем, как интегрировать reCAPTCHA v3 в проект на Django.

1. Что такое Google reCAPTCHA v3?

reCAPTCHA v3 работает незаметно для пользователя. Она оценивает запросы по шкале от 0.0 (бот) до 1.0 (человек) и позволяет настроить защиту на критичных участках сайта (формы регистрации, комментарии и т.д.).

2. Регистрация reCAPTCHA на сайте Google

  1. Перейдите на сайт reCAPTCHA и авторизуйтесь через Google-аккаунт.
  2. Создайте новый проект:
    • Название: например, «My Django Project»
    • Тип: reCAPTCHA v3
    • Домены: укажите домены вашего сайта (для локальной разработки добавьте «localhost»)
  3. Скопируйте Site Key и Secret Key — они понадобятся для интеграции.

3. Настройка Django-проекта

3.1. Установка зависимостей

pip install requests

3.2. Добавление ключей в settings.py

# settings.py
RECAPTCHA_SITE_KEY = 'ваш_site_key'
RECAPTCHA_SECRET_KEY = 'ваш_secret_key'
RECAPTCHA_REQUIRED_SCORE = 0.5 # Минимальный порог доверия

3.3. Создание приложения для reCAPTCHA

python manage.py startapp captcha

4. Реализация проверки на сервере

4.1. Функция валидации токена

# captcha/utils.py
import requests
from django.conf import settings

def verify_recaptcha(token):
data = {
'secret': settings.RECAPTCHA_SECRET_KEY,
'response': token
}
response = requests.post('https://www.google.com/recaptcha/api/siteverify ', data=data)
result = response.json()
return result.get('success', False) and result.get('score', 0) >= settings.RECAPTCHA_REQUIRED_SCORE

5. Интеграция с формами

5.1. Добавление скрипта в шаблон

<script src="https://www.google.com/recaptcha/api.js?render={% raw %}{{ settings.RECAPTCHA_SITE_KEY }}{% endraw %}"></script>

5.2. Пример формы с защитой

<form id="contactForm">
<input type="text" name="name" required>
<textarea name="message" required></textarea>
<input type="hidden" id="g-recaptcha-response" name="g-recaptcha-response">
<button type="submit">Отправить</button>
</form>

<script>
document.getElementById('contactForm').addEventListener('submit', function(e) {
e.preventDefault();
grecaptcha.ready(function() {
grecaptcha.execute('{% raw %}{{ settings.RECAPTCHA_SITE_KEY }}{% endraw %}', {action: 'contactForm'})
.then(function(token) {
document.getElementById('g-recaptcha-response').value = token;
e.target.submit();
});
});
});
</script>

6. Обработка в Django-представлении

from django.http import JsonResponse
from .utils import verify_recaptcha

def contact_view(request):
if request.method == 'POST':
token = request.POST.get('g-recaptcha-response')
if verify_recaptcha(token):
# Обработка валидной формы
return JsonResponse({'status': 'success'})
return JsonResponse({'status': 'error', 'message': 'reCAPTCHA verification failed'}, status=400)
return render(request, 'contact.html')

7. Тестирование

  • Используйте тестовый ключ для локальной отладки
  • Проверьте поведение при разных значениях RECAPTCHA_REQUIRED_SCORE
  • Протестируйте с помощью инструментов автоматизации (например, Selenium)

8. Оптимизация производительности

  • Кэшируйте ответы от Google API на 1-2 минуты
  • Ограничьте частоту запросов с одного IP
  • Для AJAX-форм используйте одноразовые токены

9. Логирование и мониторинг

# captcha/middleware.py
from .utils import verify_recaptcha

class RecaptchaMiddleware:
def init (self, get_response):
self.get_response = get_response

def __call__(self, request):
if request.method == 'POST' and request.path == '/contact/':
token = request.POST.get('g-recaptcha-response')
request.recaptcha_verified = verify_recaptcha(token)
return self.get_response(request)

10. Распространенные ошибки

  • Ошибка 403: Проверьте корректность Secret Key
  • Нулевой score: Убедитесь, что action в JavaScript совпадает с ожидаемым
  • Проблемы с CORS: Добавьте заголовки Access-Control-Allow-Origin

Заключение

Интеграция Google reCAPTCHA v3 в Django-проект позволяет эффективно бороться с автоматическими ботами, сохраняя удобство для пользователей. Настройте систему логгирования и регулярно анализируйте подозрительные запросы для максимальной защиты вашего веб-приложения.

Написать комментарий

Вы можете оставить комментарий автору статьи Обязательные поля помечены *