我希望在生产环境中运行express.js应用程序,而我想要的最后一件事是让任何人都知道它是由express.js或一般由node驱动的。我读了这篇文章:
https://expressjs.com/en/advanced/best-practice-security.html
并且肯定知道我需要删除X-Powered-By(无论是否使用头盔)。
困扰我的是文章中的声明:
注意:禁用X-Powered-By标头不会阻止资深攻击者从确定应用程序正在运行表达。它可能不鼓励随意利用,但是还有其他方法确定应用程序正在运行Express。
攻击者还可以通过哪些其他方式检测到express.js应用程序正在运行,以及如何防止这种情况发生?
This评论可能会让您感兴趣。我已复制粘贴以下几点:
检测服务器是否正在运行Express的常用方法
- 是否所有响应头都小写?数量越多,分配给Node.js服务器的点就越多,这又计入Express.js。
- 向随机URL发出一些请求是为了寻找404。如果响应正文的格式为“ Cannot GET {url}”,则它给Express.js带来了很多要点。实际上,这是用来了解您是Express.js服务器的主要赠品。
- 如果有一个ETag标头,它会是什么样?对于Express.js,有不同版本的ETag标头格式的定义,因此,与某些格式匹配的标头不仅为Express.js指明要点,而且甚至提示您正在使用的Express.js版本,因为该格式已经随着时间而改变(即使X-Powered-By标头也不提供该级别的详细信息,因为它不包含版本)。
如official website所述,有很多事情要做:
这里是主要摘录,建议的完整列表在我给您的链接上。
[使用头盔
var helmet = require('helmet')
app.use(helmet())
至少禁用X-Powered-By标头
app.disable('x-powered-by')