文章内容
2017/8/5 11:22:48,作 者: 黄兵
关于web服务器头部的Server与X-Powered-By信息
通过工具可以查询到站点服务器信息与程序信息及版本,其实这是通过服务器响应头信息里返回的,如果把这些信息暴露出去对站点不安全,我们可以通过隐藏或修改头信息的方法来阻止这些信息暴露
头信息包含服务器信息与程序信息
有些查询工具在我们输入某个站点的URL后就能判断这个站点的WebServer与程序类型。
例如在站长工具下guofei.me站点:

查询豆瓣的

这个工具重点在于它可以检测出站点的服务器类型与程序类型,它是依据什么途径获取服务器类型与程序支持的信息呢?我们用Chrome打开刚才测试用的guofei.me站点,看服务器响应头信息

刚才利用工具检测出的服务器与程序支持的信息都在站点响应的头信息里,这些信息都是web服务器软件输出的,不同的web服务器还有不同的输出,比如tomcat的

修改这头信息
每个webserver都有自己的标识,甚至版本号!这些信息如果暴露出去,服务器就容易被攻击,严重的甚至导致站点数据丢失。既然它是程序输出,我们只要找到输出的地方就能修改,下面以本站用的Tornado作为例子教你如何修改这两个头信息
一、打开tornado的web.py文件,找到
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | def clear(self): """Resets all headers and content for this response.""" self._headers = httputil.HTTPHeaders({ "Server": "TornadoServer/%s" % tornado.version, "Content-Type": "text/html; charset=UTF-8", "Date": httputil.format_timestamp(time.gmtime()), }) self.set_default_headers() if not self.request.supports_http_1_1(): if self.request.headers.get("Connection") == "Keep-Alive": self.set_header("Connection", "Keep-Alive") self._write_buffer = [] self._status_code = 200 self._reason = httputil.responses[200] |
这里就是头信息输出定义的地方,默认程序输出的Server信息如:

直接输出了程序信息与版本,我们修改一下server字段,并且添加X-Powered-By程序支持字段如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | def clear(self): """Resets all headers and content for this response.""" self._headers = httputil.HTTPHeaders({ "Server": "QttcServer", "Content-Type": "text/html; charset=UTF-8", "Date": httputil.format_timestamp(time.gmtime()), }) self.set_default_headers() if not self.request.supports_http_1_1(): if self.request.headers.get("Connection") == "Keep-Alive": self.set_header("Connection", "Keep-Alive") self._write_buffer = [] self._status_code = 200 self._reason = httputil.responses[200] |
重新查询,修改后的头部信息如下:

最后
任何服务器的头信息都能修改,只不过修改的方式不一样,比如PHP,Apache,Nginx等。有一次在网上看到有人说如果浏览网站时,站点的文件时php后缀的就一定是php程序,其实这是错误的,php后缀的文件不一定是PHP文件,PHP程序不一定是php后缀。
评论列表