DNS Prefetch Control 默认启用

原文链接

简介:该中间件允许您通过设置X-DNS-Prefetch-Control响应头来禁用浏览器的DNS预解析。

攻击方式

当您访问一个URL时,您的浏览器会去查找域的IP地址。举个例子,它必须将example.com解析为93.184.216.34。这个过程就叫做DNS解析。

浏览器可以在用户单击链接或是从某处加载资源之前启动这些DNS请求。这样就提高了用户点击链接时的性能,但也影响了用户的隐私。因为它可以理解为替用户访问了他们并未访问的链接。

扩展阅读

Header详解

X-DNS-Prefetch-Control告诉浏览器是否启用DNS预解析。开启它的时候不一定会起作用——不是所有浏览器都支持它——但是关闭的话则会在所有浏览器禁用DNS预解析。

您可以将X-DNS-Prefetch-Control设置为on/off,来启用/禁用DNS预解析。

大多数的浏览器不做DNS预解析,因此该请求头就被忽略了。

扩展阅读

代码

Helmet的DNS Prefetch Control是一个相对简单的中间件,仅仅设置X-DNS-Prefetch-Control响应头而已。

您可以作为Helmet的一部分使用:

// Make sure you run "npm install helmet" to get the Helmet package.
const helmet = require('helmet')

// Sets "X-DNS-Prefetch-Control: off".
// 将X-DNS-Prefetch-Control 设置为 off
app.use(helmet.dnsPrefetchControl())
1
2
3
4
5
6

也可以单独使用:

// Make sure you run "npm install dns-prefetch-control" to get the dns-prefetch-control package.
const dnsPrefetchControl = require('dns-prefetch-control')

// Sets "X-DNS-Prefetch-Control: off".
// 将X-DNS-Prefetch-Control 设置为 off
app.use(dnsPrefetchControl())
1
2
3
4
5
6

它很方便,开箱即用:

// 将X-DNS-Prefetch-Control 设置为 off
app.use(dnsPrefetchControl())

// 将X-DNS-Prefetch-Control 设置为 off
app.use(dnsPrefetchControl({ allow: false }))

// 将X-DNS-Prefetch-Control 设置为 on
app.use(dnsPrefetchControl({ allow: true }))
1
2
3
4
5
6
7
8

该模块是Helmet的默认模块。

上次更新: 1/19/2020, 5:49:54 PM