You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需用户认证,如何保护Node.js服务器的POST端点?

问题描述

我有一个带单个POST端点的Node.js服务器,配合React应用使用,但不想让其他人访问这个端点。服务器用来处理不适合或不能在客户端操作的数据,他人无法从服务器获取数据,但提交的数据需要保护。

除了用户认证外,还有什么方法可以防止他人访问该POST端点?我发现只要知道正确的URL和JSON数据参数,就能通过cURL命令访问。

我已经配置了CORS,仅允许我的域名访问:

app.use(
  cors({
    origin: [
      'http://myWebsite.com',
      'http://www.myWebsite.com',
      'https://myWebsite.com',
      'https://www.myWebsite.com',
    ],
  }),
);

可行防护方案(除用户认证外)
  • 请求签名验证:前端用双方约定的密钥,对请求参数、时间戳等信息生成签名,随请求一起发送。服务器收到请求后,用相同密钥重新计算签名并比对,只有签名匹配的请求才会被处理。这种方式能有效防止伪造请求。
  • CSRF令牌校验:前端从服务器获取CSRF令牌,每次发起POST请求时在请求头或表单中携带该令牌。服务器验证令牌的有效性,不匹配则拒绝请求。虽然CSRF主要针对跨站伪造,但也能阻挡部分直接的未授权请求。
  • 请求频率限制:使用express-rate-limit这类中间件,对该POST端点设置请求频率阈值(比如每分钟最多10次请求),防止恶意批量请求。
  • 请求体哈希校验:前端结合密钥对请求体生成哈希值,随请求发送。服务器收到后重新计算请求体的哈希并比对,确保请求内容未被篡改且来源合法。
  • 自定义请求头验证:约定一个仅前端和服务器知晓的自定义请求头(例如X-Valid-Key),服务器检查请求中是否存在该头且值正确。不过这种方式容易被抓包获取,建议配合加密手段一起使用。

个人解决方案分享

我在前端和Node.js服务器中引入了CryptoJS,两端配置相同的环境变量作为密钥。请求时用该密钥对请求数据加密,服务器收到后用密钥解密,没有正确密钥的请求无法被处理,这个方法成功解决了我的问题。

内容的提问来源于stack exchange,提问作者dela1000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 07:25:18