在Django Web应用开发中,安全头配置是保障应用安全性的关键环节。本文将对比分析不同安全头的配置方法及其浏览器兼容性。
安全头配置基础
首先,在settings.py中启用django-security中间件:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
# ... 其他中间件
]
SECURE_BROWSER_XSS_FILTER = True
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
核心安全头对比测试
Content-Security-Policy (CSP)
传统配置:
SECURE_CONTENT_SECURITY_POLICY = "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'"
现代推荐:
# 在中间件中动态设置
from django.utils.deprecation import MiddlewareMixin
class CSPMiddleware(MiddlewareMixin):
def process_response(self, request, response):
response['Content-Security-Policy'] = "default-src 'self'; img-src 'self' data:; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'"
return response
浏览器兼容性测试
| 浏览器 | 支持情况 | 备注 |
|---|---|---|
| Chrome 60+ | 完全支持 | 需要HTTPS |
| Firefox 52+ | 完全支持 | 有部分限制 |
| Safari 10+ | 基本支持 | 需要实验性功能 |
| IE 11 | 有限支持 | 仅部分头部有效 |
实际部署验证
创建测试视图验证配置:
def security_test(request):
response = HttpResponse('Security Headers Test')
response['X-Content-Type-Options'] = 'nosniff'
response['X-Frame-Options'] = 'DENY'
response['X-XSS-Protection'] = '1; mode=block'
return response
通过浏览器开发者工具检查响应头,确保所有安全头正确设置。建议使用https://securityheaders.com/进行在线检测验证。

讨论