A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/django/django/commit/380545bf85cbf17fc698d136815b7691f8d023ca below:

[1.7.x] Prevented leaking the CSRF token through caching. · django/django@380545b · GitHub

File tree Expand file treeCollapse file tree 2 files changed

+36

-1

lines changed

Filter options

Expand file treeCollapse file tree 2 files changed

+36

-1

lines changed Original file line number Diff line number Diff line change

@@ -47,7 +47,8 @@

47 47 48 48

from django.conf import settings

49 49

from django.core.cache import caches, DEFAULT_CACHE_ALIAS

50 -

from django.utils.cache import get_cache_key, learn_cache_key, patch_response_headers, get_max_age

50 +

from django.utils.cache import (get_cache_key, get_max_age, has_vary_header,

51 +

learn_cache_key, patch_response_headers)

51 52

from django.utils.deprecation import RemovedInDjango18Warning

52 53 53 54

@@ -91,8 +92,15 @@ def process_response(self, request, response):

91 92

if not self._should_update_cache(request, response):

92 93

# We don't need to update the cache, just return.

93 94

return response

95 + 94 96

if response.streaming or response.status_code != 200:

95 97

return response

98 + 99 +

# Don't cache responses that set a user-specific (and maybe security

100 +

# sensitive) cookie in response to a cookie-less request.

101 +

if not request.COOKIES and response.cookies and has_vary_header(response, 'Cookie'):

102 +

return response

103 + 96 104

# Try to get the timeout from the "max-age" section of the "Cache-

97 105

# Control" header before reverting to using the default cache_timeout

98 106

# length.

Original file line number Diff line number Diff line change

@@ -18,11 +18,13 @@

18 18

from django.core import management

19 19

from django.core.cache import (cache, caches, CacheKeyWarning,

20 20

InvalidCacheBackendError, DEFAULT_CACHE_ALIAS)

21 +

from django.core.context_processors import csrf

21 22

from django.db import connection, router, transaction

22 23

from django.core.cache.utils import make_template_fragment_key

23 24

from django.http import HttpResponse, StreamingHttpResponse

24 25

from django.middleware.cache import (FetchFromCacheMiddleware,

25 26

UpdateCacheMiddleware, CacheMiddleware)

27 +

from django.middleware.csrf import CsrfViewMiddleware

26 28

from django.template import Template

27 29

from django.template.response import TemplateResponse

28 30

from django.test import TestCase, TransactionTestCase, RequestFactory, override_settings

@@ -1739,6 +1741,10 @@ def hello_world_view(request, value):

1739 1741

return HttpResponse('Hello World %s' % value)

1740 1742 1741 1743 1744 +

def csrf_view(request):

1745 +

return HttpResponse(csrf(request)['csrf_token'])

1746 + 1747 + 1742 1748

@override_settings(

1743 1749

CACHE_MIDDLEWARE_ALIAS='other',

1744 1750

CACHE_MIDDLEWARE_KEY_PREFIX='middlewareprefix',

@@ -1958,6 +1964,27 @@ def test_view_decorator(self):

1958 1964

response = other_with_prefix_view(request, '16')

1959 1965

self.assertEqual(response.content, b'Hello World 16')

1960 1966 1967 +

def test_sensitive_cookie_not_cached(self):

1968 +

"""

1969 +

Django must prevent caching of responses that set a user-specific (and

1970 +

maybe security sensitive) cookie in response to a cookie-less request.

1971 +

"""

1972 +

csrf_middleware = CsrfViewMiddleware()

1973 +

cache_middleware = CacheMiddleware()

1974 + 1975 +

request = self.factory.get('/view/')

1976 +

self.assertIsNone(cache_middleware.process_request(request))

1977 + 1978 +

csrf_middleware.process_view(request, csrf_view, (), {})

1979 + 1980 +

response = csrf_view(request)

1981 + 1982 +

response = csrf_middleware.process_response(request, response)

1983 +

response = cache_middleware.process_response(request, response)

1984 + 1985 +

# Inserting a CSRF cookie in a cookie-less request prevented caching.

1986 +

self.assertIsNone(cache_middleware.process_request(request))

1987 + 1961 1988 1962 1989

@override_settings(

1963 1990

CACHE_MIDDLEWARE_KEY_PREFIX='settingsprefix',

You can’t perform that action at this time.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4