代码之家  ›  专栏  ›  技术社区  ›  Luc sra

CherryPy:从页眉和错误页面删除版本

  •  0
  • Luc sra  · 技术社区  · 7 年前

    防止 version disclosure ,我希望CherryPy不要透露它的版本。它会显示在错误页面和服务器标题中。这怎么能被禁用?

    1 回复  |  直到 7 年前
        1
  •  2
  •   J_K    7 年前

    加上吕克的回答;

    在你的配置中,你应该改变你的响应。标题。服务器“到”或其他自定义内容,以在浏览器标题中隐藏版本。

    您还可以编辑模板代码以删除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')
    
        2
  •  1
  •   Luc sra    7 年前

    这似乎没有得到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 ,通过设置config变量 response.headers.server :

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

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

    请注意,在启动服务器之前(即在调用 cherrypy.quickstart(...) ).