csrf.py 720 B

1234567891011121314151617181920212223
  1. from misago.utils.strings import random_string
  2. class CSRFProtection(object):
  3. def __init__(self, csrf_token):
  4. self.csrf_id = '_csrf_token'
  5. self.csrf_token = csrf_token
  6. def request_secure(self, request):
  7. return request.method == 'POST' and request.POST.get(self.csrf_id) == self.csrf_token
  8. class CSRFMiddleware(object):
  9. def process_request(self, request):
  10. if request.user.is_crawler():
  11. return None
  12. if 'csrf_token' in request.session:
  13. csrf_token = request.session['csrf_token']
  14. else:
  15. csrf_token = random_string(16);
  16. request.session['csrf_token'] = csrf_token
  17. request.csrf = CSRFProtection(csrf_token)