Я получаю много запросов спамботов (запросы с реферером как спам-сайт). Как отклонить запрос досрочно с помощью process_request на промежуточном программном обеспечении, чтобы django просто не отвечал на запросы, сделанные от конкретного реферера?Как отклонить запрос досрочно с помощью django?
ответ
Вы можете создать класс RejectSpambotRequestsMiddleware
, который отклонит запросы, если referer
запроса относится к конкретному источнику.
Он должен вернуть либо None
, либо объект HttpResponse
. Если он вернет None
, Django продолжит обработку этого запроса, выполнив любые другие process_request()
middlewares, затем process_view()
промежуточное программное обеспечение и, наконец, соответствующее представление. Как правило, ответ 403 Forbidden
отправляется пользователю, если входящий запрос не выполняет проверки, выполняемые промежуточным программным обеспечением.
from django.http import HttpResponseForbidden
class RejectSpambotRequestsMiddleware(object):
def process_request(self, request):
referer = request.META.get('HTTP_REFERER')
if referer == 'spambot_site_referer':
return HttpResponseForbidden() # reject the request and return 403 forbidden response
return # return None in case of a valid request
Добавьте межплатформенное к MIDDLEWARE_CLASSES
в файле settings.py
.
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
...
...
# your custom middleware here
'my_project.middlewares.RejectSpambotRequestsMiddleware',
)
Примечание: Здесь RejectSpambotRequestsMiddleware
будет работать в конце, как Django применяет промежуточное программное обеспечение в порядке, она определена в MIDDLEWARE_CLASSES
, сверху вниз. Вы можете изменить порядок MIDDLEWARE_CLASSES
в соответствии с вашими потребностями.
- 1. Как отклонить запрос TCP с помощью Qt
- 2. Как отклонить прямой запрос?
- 3. Отклонить запрос с переменной окружения
- 4. Как явно отклонить запрос IPN
- 5. Как получить запрос ajax с помощью django?
- 6. Завершение HTTP-запроса досрочно
- 7. Отклонить запрос о разрешении на Marshmallow с помощью кнопки возврата
- 8. Отклонить popover с помощью UIbutton
- 9. Отклонить представление с помощью анимации
- 10. Как отклонить SDCAlertView с помощью жестов tap?
- 11. Как отклонить popover с помощью навигационного контроллера?
- 12. Spring RestController: отклонить запрос с неизвестными полями
- 13. Веб-сервис ASP.Net. Как отклонить запрос?
- 14. Как отклонить HTTP-запрос в приложении expressjs?
- 15. Отклонить определенный запрос в mysql
- 16. Кодирование парсера-кода досрочно?
- 17. Сессии заканчиваются досрочно
- 18. Узел Установка JS заканчивается досрочно
- 19. Фоновые задания досрочно
- 20. PHP-скрипт, заканчивающийся досрочно
- 21. Django: запрос с помощью ManyToManyField count?
- 22. HttpServletResponse, кажется, периодически отправляет досрочно
- 23. Создать запрос с помощью Django ORM
- 24. Как принять или отклонить запрос друга с парсером?
- 25. Итератор Java LinkedList досрочно исчерпан
- 26. Может ли запрос обрабатываться и заканчиваться досрочно, в начале трубопровода?
- 27. не может отклонить uidatepicker с помощью uitapgesturerecognizer
- 28. отклонить модальный вид с помощью клавиши возврата
- 29. Проблема с AVAudioplayer или делегатом, полученным досрочно
- 30. Загрузка изображения завершена досрочно nodejs
Я думаю, что лучшим вариантом было бы отбить такие запросы на уровне [веб-сервера] (http://serverfault.com/questions/289785/where-to-find-and-how-to-block-blacklisted- ips-and-proxies) – Pynchia
Если запрос достигнет Django, он будет занимать ресурсы. Я не уверен, что это ваша главная проблема здесь, или если на вашем сайте есть спам, но неплохо использовать брандмауэр или что-то, что просто отклоняет входящий запрос в соответствии с некоторыми правилами, чтобы предотвратить его выполнение ценные ресурсы, которые можно использовать в других местах. – knbk
Боковой вопрос: Какова цель таких запросов спамботов? Как они думают, что они достигнут? – skaz