在 Web 开发中,访问限制是一个常见的需求,IP 限制访问是其中一种常用的限制方式。在 Express.js 中,实现 IP 限制访问可以通过中间件来实现。本文将介绍如何在 Express.js 中实现 IP 限制访问。
实现原理
Express.js 是一个基于 Node.js 平台的 Web 框架,它提供了一系列的中间件来处理 HTTP 请求。我们可以通过编写自定义的中间件来实现 IP 限制访问的功能。
实现 IP 限制访问的主要思路如下:
- 获取客户端 IP 地址
- 判断客户端 IP 是否在允许访问的 IP 列表中
- 如果客户端 IP 不在允许访问的 IP 列表中,则返回 403 状态码,否则继续处理请求
实现步骤
1. 获取客户端 IP 地址
Express.js 中可以通过 req.ip
属性来获取客户端 IP 地址。在获取 IP 地址的过程中,我们需要注意一下几点:
- 客户端可能处于代理后面,这时候需要获取真实 IP 地址
- IPv4 和 IPv6 地址格式不同,需要进行兼容处理
基于以上考虑,获取客户端 IP 地址的代码如下:
function getClientIP(req) { // 获取 X-Real-IP 或 X-Forwarded-For const realIP = req.headers['x-real-ip'] || req.headers['x-forwarded-for'] || ''; // 通过逗号分隔获取第一个 IP 地址,并去除空格 const ip = realIP.split(',')[0].trim(); // 如果获取到的 IP 地址为空,则返回客户端 IP 地址 return ip || req.ip; }
2. 判断客户端 IP 是否在允许访问的 IP 列表中
在实现 IP 限制访问时,我们可以将允许访问的 IP 列表保存在一个数组中,然后对客户端 IP 进行判断。为了提高判断效率,我们可以将 IP 地址转换成数字形式,并通过二分查找的方式进行判断。如果客户端 IP 在允许访问的 IP 列表中,则返回 next()
继续处理请求,否则返回 403 状态码。
-- -------------------- ---- ------- -------- -------------------- - -- - -- --------- ----- ------ - ----------------- -- --------------------- -- ---------------------------- ----- -- ----- -- -- - ------- -- ------ -- ------ --------------- -- -- - - --- ------ ------------- ---- ----- - ----- -------- - ----------------- -- ---- -- --------- ----- ----------- - --------------------------- -- ---------------------------- ----- -- ----- -- -- - ------ -- ----------- -- -------- -- --- ----- ----- - ---------------------- -- ----- -- ------------- -- ------ --- -- -- ------------- --- ------------ - ------- - ---- - ---------------------- - -- -
3. 添加中间件
在代码中使用上述的 ipFilter
中间件即可实现 IP 限制访问的功能。
-- -------------------- ---- ------- ----- ------- - ------------------- ----- --- - ---------- -- ----- -- ---- ----- ---------- - ------------- --------------- -- -- ------- ----- -------- - ----------------------- ------------------------------ -- -------- ------------ ------------- ---- - --------------- --------- --- ---------------- ---------- - ---------------- --------- -- ---- -------- ---
示例代码
完整示例代码如下:
-- -------------------- ---- ------- -------- ---------------- - ----- ------ - ------------------------ -- ------------------------------ -- --- ----- -- - ---------------------------- ------ -- -- ------- - -------- -------------------- - ----- ------ - ----------------- -- --------------------- -- ---------------------------- ----- -- ----- -- -- - ------- --------------- -- -- - - --- ------ ------------- ---- ----- - ----- -------- - ----------------- ----- ----------- - --------------------------- -- ---------------------------- ----- -- ----- -- -- - ------ ----- ----- - ---------------------- -- ----- -- ------------- -- ------ --- -- -- ------------- --- ------------ - ------- - ---- - ---------------------- - -- - ----- ------- - ------------------- ----- --- - ---------- ----- ---------- - ------------- --------------- ------------------------------ ------------ ------------- ---- - --------------- --------- --- ---------------- ---------- - ---------------- --------- -- ---- -------- ---
总结
本文介绍了如何在 Express.js 中实现 IP 限制访问,通过编写自定义的中间件,可以方便地对客户端 IP 进行判断,实现访问限制的功能。使用中需要注意客户端处于代理后面时的情况,并进行兼容处理。除此之外,我们还可以通过其他方式实现访问限制的功能,例如使用第三方模块等。希望本文能对大家有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6455c2f9968c7c53b0926872