2
我收到了很多spambot請求(將referrer作爲垃圾網站的請求)。 如何用中間件上的process_request過早拒絕請求,這樣django根本不會響應從特定引用者發出的請求?如何用django過早拒絕請求?
我收到了很多spambot請求(將referrer作爲垃圾網站的請求)。 如何用中間件上的process_request過早拒絕請求,這樣django根本不會響應從特定引用者發出的請求?如何用django過早拒絕請求?
您可以創建RejectSpambotRequestsMiddleware
類,如果請求的referer
來自特定的引薦來源,該類將拒絕請求。
它應返回None
或HttpResponse
對象。如果返回None
,則Django將繼續處理此請求,執行任何其他process_request()
中間件,然後,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
然後在你的settings.py
文件添加中間件到MIDDLEWARE_CLASSES
。
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
...
...
# your custom middleware here
'my_project.middlewares.RejectSpambotRequestsMiddleware',
)
注:這裏,RejectSpambotRequestsMiddleware
將在年底爲Django的它在MIDDLEWARE_CLASSES
定義的順序,自上而下的應用中間件運行。您可以根據需要更改MIDDLEWARE_CLASSES
的順序。
我認爲更好的選擇是在[web服務器級別]上阻止這樣的請求(http://serverfault.com/questions/289785/where-to-find-and-how-to-block-blacklisted- ips-and-proxies) – Pynchia
如果請求到達Django,它將佔用資源。我不確定這是您主要關注的問題,還是您的網站上存在垃圾郵件,但使用防火牆或根據某些規則丟棄收到的請求是一個好主意,以防止它佔用可以在別處使用的寶貴資源。 – knbk
側面問題:這種垃圾郵件請求的目的是什麼?他們認爲他們會完成什麼? – skaz