CherryPy:从标题和错误页面中删除版本

时间:2019-03-01 15:17:34

标签: http-headers cherrypy

为防止version disclosure,我希望CherryPy不透露其版本。它显示在错误页面和服务器标题中。如何禁用它?

2 个答案:

答案 0 :(得分:1)

加上Luc的答案;

在配置中,您应将'response.headers.server'更改为''或自定义名称,以将版本也隐藏在浏览器标题中。

您也可以编辑模板代码以删除Powered By。例如,将其替换为“。

    cherrypy.__version__ = ''
    cherrypy._cperror._HTTPErrorTemplate = cherrypy._cperror._HTTPErrorTemplate.replace('Powered by <a href="http://www.cherrypy.org">CherryPy %(version)s</a>\n','%(version)s')

答案 1 :(得分:0)

CherryPy似乎不支持此功能,但是我们可以自行管理!

错误页面模板硬编码在_cperror.py中,只有通过自定义错误页面才能从模板中删除版本号。但是,我们可以覆盖从中读取版本号的变量:

cherrypy.__version__ = ''

查看变量的用法,我们看到这将同时影响错误页面和HTTP标头:

/usr/local/lib/python3.6/dist-packages/cherrypy$ grep cherrypy.__version__ *.py
_cperror.py:         kwargs['version'] = cherrypy.__version__
_cprequest.py:       'Server': 'CherryPy/' + cherrypy.__version__,

HTTP Server标头仍将提及CherryPy。如Baxter所述,可以通过设置配置变量response.headers.server来覆盖它:

cherrypy.config.update({
    'response.headers.server': '',
    })

您的错误页面上仍然会显示“ Powered by CherryPy”,但至少不会提及版本号。

请注意,必须在启动服务器之前(即,在致电cherrypy.quickstart(...)之前)都插入两个代码段。