在我的Django应用程序中,以下设置确保响应标头启用了标准键值对。
但是,'服务器'的名称和版本信息在默认情况下仍然可见,需要隐藏(公开的服务器名称和版本是OWASP漏洞)。
class MyAppMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
response['X-XSS-Protection'] = "1; mode=block"
return response
class RemoveHeaders(object): # this method invocation throws error
def process_response(self, request, response):
del response['Server']
return response
也如其他文章所建议的那样,此Middleware.py在settings.py中以中间件的第一顺序声明:
MIDDLEWARE = [
'MyApp.middleware.RemoveHeaders',
'MyApp.middleware.MyAppMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
RemoveHeaders()方法抛出错误:TypeError:RemoveHeaders()不带参数。这是因为我不确定哪个对象将传递给此方法。
在上面的代码片段中,这个想法不是使用del运算符,而是只是隐藏了'Server'参数,以免显示在响应头中,这是我无法完成的。
使用主程序包中的以下代码创建一个新文件(mymw.py)。例如项目/ /mymw.py
class MidWare(object):
def process_response(self, request, response):
response['server'] = ''
return response
并在settings.py之类的MIDDLEWARE_CLASSES
列表顶部添加“ Project.mymw.MidWare”>
MIDDLEWARE_CLASSES = ( "Project.mymw.MidWare", ... )
此代码是一个简单的中间件类,可以处理Auger响应或请求。如果要在结尾处删除标题或其他内容,则必须将其放在
MIDDLEWARE_CLASSES
的第一个位置。