Ticket #19436: 19436_patch.diff

File 19436_patch.diff, 3.5 KB (added by Olivier Sels, 11 years ago)
  • django/middleware/csrf.py

    diff --git a/django/middleware/csrf.py b/django/middleware/csrf.py
    index 4230344..98974f0 100644
    a b class CsrfViewMiddleware(object):  
    8383        return None
    8484
    8585    def _reject(self, request, reason):
     86        logger.warning('Forbidden (%s): %s',
     87                       reason, request.path,
     88            extra={
     89                'status_code': 403,
     90                'request': request,
     91            }
     92        )
    8693        return _get_failure_view()(request, reason=reason)
    8794
    8895    def process_view(self, request, callback, callback_args, callback_kwargs):
    class CsrfViewMiddleware(object):  
    134141                # we can use strict Referer checking.
    135142                referer = request.META.get('HTTP_REFERER')
    136143                if referer is None:
    137                     logger.warning('Forbidden (%s): %s',
    138                                    REASON_NO_REFERER, request.path,
    139                         extra={
    140                             'status_code': 403,
    141                             'request': request,
    142                         }
    143                     )
    144144                    return self._reject(request, REASON_NO_REFERER)
    145145
    146146                # Note that request.get_host() includes the port.
    147147                good_referer = 'https://%s/' % request.get_host()
    148148                if not same_origin(referer, good_referer):
    149149                    reason = REASON_BAD_REFERER % (referer, good_referer)
    150                     logger.warning('Forbidden (%s): %s', reason, request.path,
    151                         extra={
    152                             'status_code': 403,
    153                             'request': request,
    154                         }
    155                     )
    156150                    return self._reject(request, reason)
    157151
    158152            if csrf_token is None:
    159153                # No CSRF cookie. For POST requests, we insist on a CSRF cookie,
    160154                # and in this way we can avoid all CSRF attacks, including login
    161155                # CSRF.
    162                 logger.warning('Forbidden (%s): %s',
    163                                REASON_NO_CSRF_COOKIE, request.path,
    164                     extra={
    165                         'status_code': 403,
    166                         'request': request,
    167                     }
    168                 )
    169156                return self._reject(request, REASON_NO_CSRF_COOKIE)
    170157
    171158            # Check non-cookie token for match.
    class CsrfViewMiddleware(object):  
    179166                request_csrf_token = request.META.get('HTTP_X_CSRFTOKEN', '')
    180167
    181168            if not constant_time_compare(request_csrf_token, csrf_token):
    182                 logger.warning('Forbidden (%s): %s',
    183                                REASON_BAD_TOKEN, request.path,
    184                     extra={
    185                         'status_code': 403,
    186                         'request': request,
    187                     }
    188                 )
    189169                return self._reject(request, REASON_BAD_TOKEN)
    190170
    191171        return self._accept(request)
  • django/views/decorators/csrf.py

    diff --git a/django/views/decorators/csrf.py b/django/views/decorators/csrf.py
    index 7a7eb6b..a6bd7d8 100644
    a b using the decorator multiple times, is harmless and efficient.  
    1515
    1616class _EnsureCsrfToken(CsrfViewMiddleware):
    1717    # We need this to behave just like the CsrfViewMiddleware, but not reject
    18     # requests.
     18    # requests or log warnings.
    1919    def _reject(self, request, reason):
    2020        return None
    2121
Back to Top