Skip to content

Commit 70bea77

Browse files
committed
Drop deprecated XssProtect middleware
1 parent 40128a8 commit 70bea77

File tree

4 files changed

+0
-117
lines changed

4 files changed

+0
-117
lines changed

README.md

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ Pre-Django 1.10, middleware modules can be added to `MIDDLEWARE_CLASSES` list in
4747
...
4848
'security.middleware.DoNotTrackMiddleware',
4949
'security.middleware.ContentNoSniff',
50-
'security.middleware.XssProtectMiddleware',
5150
'security.middleware.XFrameOptionsMiddleware',
5251
)
5352

@@ -57,7 +56,6 @@ After Django 1.10, middleware modules can be added to `MIDDLEWARE` list in setti
5756
...
5857
'security.middleware.DoNotTrackMiddleware',
5958
'security.middleware.ContentNoSniff',
60-
'security.middleware.XssProtectMiddleware',
6159
'security.middleware.XFrameOptionsMiddleware',
6260
)
6361

@@ -139,11 +137,6 @@ or minimum configuration.
139137
<td>Disable framing of the website, mitigating Clickjacking attacks. <em>Recommended.</em>
140138
<td>Optional.
141139

142-
<tr>
143-
<td><a href="http://django-security.readthedocs.org/en/latest/#security.middleware.XssProtectMiddleware">XssProtectMiddleware</a>
144-
<td><b>DEPRECATED: </b>Will be removed in future releases, consider <a href="https://docs.djangoproject.com/en/1.11/ref/middleware/#django.middleware.security.SecurityMiddleware">django.middleware.security.SecurityMiddleware</a> via <i>SECURE_BROWSER_XSS_FILTER</i> setting.<br/>Enforce browser's Cross Site Scripting protection. <em>Recommended.</em>
145-
<td>None.
146-
147140
</table>
148141

149142
## Views

security/middleware.py

Lines changed: 0 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -187,85 +187,6 @@ def process_response(self, request, response):
187187
return response
188188

189189

190-
class XssProtectMiddleware(BaseMiddleware):
191-
"""
192-
DEPRECATED: Will be removed in future releases. Consider
193-
django.middleware.security.SecurityMiddleware as a replacement for this via
194-
SECURE_BROWSER_XSS_FILTER setting.
195-
196-
Sends X-XSS-Protection HTTP header that controls Cross-Site Scripting
197-
filter on MSIE. Use XSS_PROTECT option in settings file with the following
198-
values:
199-
200-
``sanitize`` enable XSS filter that tries to sanitize requests instead
201-
of blocking (*default*)
202-
203-
``on`` enable full XSS filter blocking XSS requests (may `leak
204-
document.referrer <http://homakov.blogspot.com/2013/02/hacking-with-xss-
205-
auditor.html>`_)
206-
207-
``off`` completely disable XSS filter
208-
209-
**Note:** As of 1.8, Django's `SECURE_BROWSER_XSS_FILTER
210-
<https://docs.djangoproject.com/en/1.8/ref/settings/#secure-browser-xss-filter>`_
211-
controls the X-XSS-Protection header.
212-
213-
Reference:
214-
215-
- `Controlling the XSS Filter
216-
<http://blogs.msdn.com/b/ieinternals/archive/2011/01/31/controlling-the-
217-
internet-explorer-xss-filter-with-the-x-xss-protection-http-
218-
header.aspx>`_
219-
"""
220-
221-
OPTIONAL_SETTINGS = ("XSS_PROTECT",)
222-
223-
OPTIONS = {
224-
"on": "1; mode=block",
225-
"off": "0",
226-
"sanitize": "1",
227-
}
228-
229-
DEFAULT = "sanitize"
230-
231-
def __init__(self, get_response=None):
232-
super().__init__(get_response)
233-
warnings.warn(
234-
(
235-
'DEPRECATED: The middleware "{name}" will no longer be '
236-
"supported in future releases of this library. Refer to {url} for "
237-
"an alternative approach with regards to the settings: {settings}"
238-
).format(
239-
name=self.__class__.__name__,
240-
url=DJANGO_SECURITY_MIDDLEWARE_URL,
241-
settings="SECURE_BROWSER_XSS_FILTER",
242-
)
243-
)
244-
245-
def load_setting(self, setting, value):
246-
if not value:
247-
self.option = self.DEFAULT
248-
return
249-
250-
value = value.lower()
251-
252-
if value in self.OPTIONS.keys():
253-
self.option = value
254-
return
255-
256-
raise ImproperlyConfigured(
257-
self.__class__.__name__ + " invalid option for XSS_PROTECT."
258-
)
259-
260-
def process_response(self, request, response):
261-
"""
262-
Add X-XSS-Protection to the response header.
263-
"""
264-
header = self.OPTIONS[self.option]
265-
response["X-XSS-Protection"] = header
266-
return response
267-
268-
269190
class ClearSiteDataMiddleware(BaseMiddleware):
270191
"""
271192
Sends Clear-Site-Data HTTP response header on requests that match

testing/settings.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@
4646
"security.middleware.ContentSecurityPolicyMiddleware",
4747
"security.middleware.StrictTransportSecurityMiddleware",
4848
"security.middleware.P3PPolicyMiddleware",
49-
"security.middleware.XssProtectMiddleware",
5049
"security.middleware.MandatoryPasswordChangeMiddleware",
5150
"security.middleware.NoConfidentialCachingMiddleware",
5251
"security.auth_throttling.Middleware",

testing/tests/tests.py

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
DoNotTrackMiddleware,
3232
SessionExpiryPolicyMiddleware,
3333
MandatoryPasswordChangeMiddleware,
34-
XssProtectMiddleware,
3534
XFrameOptionsMiddleware,
3635
ReferrerPolicyMiddleware,
3736
)
@@ -537,35 +536,6 @@ def test_default_xframe_option(self):
537536
)
538537

539538

540-
@override_settings(MIDDLEWARE=("security.middleware.XssProtectMiddleware",))
541-
class XXssProtectTests(TestCase):
542-
def test_option_set(self):
543-
"""
544-
Verify the HTTP Response Header is set.
545-
"""
546-
response = self.client.get("/accounts/login/")
547-
self.assertNotEqual(response["X-XSS-Protection"], None)
548-
549-
def test_default_setting(self):
550-
with self.settings(XSS_PROTECT=None):
551-
response = self.client.get("/accounts/login/")
552-
self.assertEqual(response["X-XSS-Protection"], "1") # sanitize
553-
554-
def test_option_off(self):
555-
with self.settings(XSS_PROTECT="off"):
556-
response = self.client.get("/accounts/login/")
557-
self.assertEqual(response["X-XSS-Protection"], "0") # off
558-
559-
def test_improper_configuration_raises(self):
560-
xss = XssProtectMiddleware()
561-
self.assertRaises(
562-
ImproperlyConfigured,
563-
xss.load_setting,
564-
"XSS_PROTECT",
565-
"invalid",
566-
)
567-
568-
569539
@override_settings(MIDDLEWARE=("security.middleware.ContentNoSniff",))
570540
class ContentNoSniffTests(TestCase):
571541
def test_option_set(self):

0 commit comments

Comments
 (0)