Mac系统部署Next.js后台管理系统项目后,网络安全自查及隐患排除
简易版:
1、修改next.js项目下的package.json文件(3000端口)
把里面的"start": "next start",
改为:
"start": "next start --hostname 127.0.0.1"
2、编辑mysql配置文件my.cnf,在文件中增加下面的代码:
[mysqld]
bind-address=127.0.0.1
mysqlx=0
再运行命令:
brew services restart mysql
3、开启Mac系统网络中的系统防火墙
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate
返回信息包括:Firewall is enabled. (State = 1)即表明防火墙开启成功!
4、关闭SSH远程登录访问(22端口)
运行下面的命令:
sudo systemsetup -getremotelogin
返回信息 Remote Login :Off 则表明Mac不支持被人用SSH远程登录
5、查看mysql是否对外开放(3306端口)
netstat -an | grep 3306
如果返回:
tcp4 0 0 127.0.0.1.3306 *.* LISTEN
则表明3306端口仅支持本地操作(是安全的)。
6、检查Next.js版本漏洞
运行命令:
npm audit
或
npm audit --registry=https://registry.npmjs.org
首选运行无损伤的修复:
npm audit fix
npm audit fix --registry=https://registry.npmjs.org
修复完毕后再进行更大版本的漏洞修复:
npm audit fix --force
或
npm audit fix --force --registry=https://registry.npmjs.org
=====================================================================
🧭 一、网络与端口层(最重要)
🔍 怎么检查
1. 查看所有监听端口
lsof -i -P | grep LISTEN
重点看:
- 有没有
0.0.0.0:xxxx - 有没有
*:xxxx
2. 检查 Next.js 是否暴露公网
理想状态:
127.0.0.1:3000 ✔
危险状态:
*:3000 ❌
0.0.0.0:3000 ❌
⚠️ 风险
- 局域网可直接访问后台
- 内网扫描暴露接口
- 绕过 Cloudflare 直接访问服务
🔧 修复方法
Next.js 绑定本机:
"start": "next start --hostname 127.0.0.1"
或:
next start --hostname 127.0.0.1
🧭 二、数据库安全层(MySQL)
🔍 怎么检查
SELECT user,host FROM mysql.user;
查看:
- 是否有
% - 是否有远程 root
- 是否有匿名用户
⚠️ 风险
| 配置 | 风险 |
|---|---|
| root@% | 高危 |
| user@% | 可远程入侵 |
| bind 0.0.0.0 | 可公网扫描 |
🔧 修复方法
1. 限制监听
bind-address = 127.0.0.1
2. 删除远程用户
DROP USER 'root'@'%';
FLUSH PRIVILEGES;
3. 最小权限原则
GRANT SELECT, INSERT ON db.* TO 'app'@'localhost';
🧭 三、系统防火墙层(macOS)
🔍 检查
macOS System Settings
→ 网络 → 防火墙
⚠️ 风险
- 防火墙关闭
- 未开启隐身模式
- 未限制入站连接
🔧 修复
建议配置:
✔ 防火墙开启
✔ stealth mode 开启
✔ 自动允许已签名应用
🧭 四、Cloudflare Tunnel 层
🔍 检查
cloudflared tunnel list
检查:
- token 是否泄露
- tunnel 是否被多人使用
- ingress 是否正确
⚠️ 风险
- token 泄露(最严重)
- tunnel 被接管
- 配置错误暴露端口
🔧 修复
去:
Cloudflare Zero Trust Dashboard
操作:
- 删除旧 tunnel
- 重新生成 token
- 更新本地配置
🧭 五、Next.js 应用层安全
🔍 检查点
1. 是否把 config 写进前端
grep -R "process.env" .
重点看:
- 有没有
NEXT_PUBLIC_ - 有没有数据库配置暴露
2. API 是否有鉴权
检查:
- 是否所有 API 都需要登录
- 是否存在未授权接口
3. 是否有登录保护
典型风险:
/admin 无限制访问 ❌
🔧 修复方法
1. API 鉴权中间件
if (!session) return unauthorized
2. rate limit(防爆破)
limit: 5 requests / min
3. 禁止敏感信息进入 client
- 只用 server component 访问 DB
- 不在
use client中写后端逻辑
🧭 六、依赖安全(npm)
🔍 检查
npm audit
npm outdated
⚠️ 风险
- RCE 漏洞(最严重)
- 上传文件攻击(xlsx)
- JSON 解析漏洞
🔧 修复
1. 更新安全依赖
npm update
2. 不要无脑:
npm audit fix --force ❌
3. 上传类库要限制:
- 文件大小
- MIME类型
- server-side解析
🧭 七、系统权限与文件安全
🔍 检查
ls -la .env*
ls -la config
⚠️ 风险
- .env 被读取
- config 外泄
- git 提交敏感信息
🔧 修复
1. 权限控制
chmod 600 .env*
chmod -R go-rwx config
2. git 忽略
.env*
config/private*
🧭 八、运行时进程安全
🔍 检查
ps aux | grep node
ps aux | grep mysql
⚠️ 风险
- root 运行 Node
- 后门进程
- 非授权服务
🔧 修复
- 使用普通用户运行
- 使用 pm2 管理
🧭 九、备份与灾难恢复(很多人忽略)
🔧 建议
每天:
mysqldump > backup.sql
上传到:
📊 最终安全评分体系(你可以自测)
| 模块 | 满分 |
|---|---|
| 网络端口隔离 | 25 |
| 数据库安全 | 20 |
| 应用安全 | 20 |
| 系统防火墙 | 10 |
| 依赖安全 | 10 |
| 备份恢复 | 15 |
🧠 一句话总结(核心思想)
Next.js 系统安全不是“防黑客”,而是三件事:
- 只允许必要端口暴露
- 所有敏感服务只在 localhost
- 外部入口只有 Cloudflare
评论
发表评论