Next.js 集成防盗链功能的解决方案

什么是防盗链?

防盗链是指通过一些措施,防止你的图片、视频等媒体资源被其他网站非法使用。

一般情况下,我们需要在服务端对 HTTP 请求头中的 Referer(来自哪个页面) 进行判断,如果请求头中的 Referer 值不是当前站点的域名,则可以认为是盗链行为。此时,我们可以通过服务端响应状态码或者返回一张仅包含「禁止盗链」图片的响应内容给请求者。

Next.js 中如何实现防盗链?

Next.js 作为一个流行的 React 框架,本身并没有集成防盗链的功能。但是,我们可以通过使用 node.js 中的 http 模块来完成防盗链的功能。下面,我们就来详细介绍一下如何在 Next.js 中实现防盗链的功能。

Step 1: 安装依赖包

为了实现防盗链的功能,我们需要安装一些依赖包。在 Next.js 项目的根目录下,执行以下命令:

其中,http 模块是 Node.js 自带的一个模块,用于处理 HTTP 请求和响应。url 模块则是 Node.js 自带的一个模块,用于解析并处理 URL。fs 模块是 Node.js 中的一个模块,用于文件的读写。

Step 2: 编写中间件函数

在 Next.js 项目的根目录下,创建一个名为 preventHotlinking.js 的中间件函数,代码如下:

上述代码首先通过 url.parse 函数获取图片的路径,然后正则表达式校验图片的扩展名是否符合标准。接着获取 referer(或者 referrer) 值,根据其值判断本次请求是否来自当前站点,如果来源不是本站点,则返回一个状态码为 HTTP 403 的响应。最后一个 no_hotlinking.jpg 是一个本地资源,表示防盗链的占位图片。

Step 3: 集成函数

在 Next.js 项目中,将编写的中间件函数作为 servermiddleware 数组的一部分集成起来。在 Next.js 项目的根目录下,打开 server.js 文件(如果不存在则需要手动创建),并编写以下代码:

上述代码中,我们使用 express 来创建服务器。在应用中间件之前,应用程序必须配置如下代码,以允许能够在 HTTP 请求中读取请求正文。

然后,我们将刚才编写的防盗链中间件作为 server 的中间件之一加入。server.all 函数就是为所有请求(*)指定回调函数,如果请求不符合路由,则使用 handle 处理器来处理。

Step 4: 正确设置 publicConfig

最后一步,打开 next.config.js,确保正确设置 publicConfig

以上设置 publicConfigblockingPreventHotlinking 属性为 true 即可实现 Next.js 集成防盗链功能的解决方案。

总结

本文详细介绍了如何在 Next.js 项目中实现防盗链功能。通过 node.js 中的 http 模块、url 模块、fs 模块等组成,以及中间件函数和 publicConfig 的配合使用,为 Next.js 提供了简单且实用的防盗链功能,通过本文的学习,可以让开发者更好地保护自己的网站资源的安全性。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/654cd7397d4982a6eb62b9fb


纠错
反馈