Django-如何在中间件文件中隐藏Server [HTTP Response标头]参数?

问题描述 投票:0回答:1

在我的Django应用程序中,以下设置确保响应标头启用了标准键值对。

但是,'服务器'的名称和版本信息在默认情况下仍然可见,需要隐藏(公开的服务器名称和版本是OWASP漏洞)。

middleware.py

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'参数,以免显示在响应头中,这是我无法完成的。

python django server middleware django-middleware
1个回答
0
投票

使用主程序包中的以下代码创建一个新文件(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的第一个位置。

© www.soinside.com 2019 - 2024. All rights reserved.