为了防止version disclosure,我希望CherryPy不要透露它的版本。它显示在错误页面和服务器标题中。怎么能被禁用?
加入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')
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(...)
之前)放置两个代码片段。