为防止version disclosure,我希望CherryPy不透露其版本。它显示在错误页面和服务器标题中。如何禁用它?
答案 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(...)
之前)都插入两个代码段。