搜索

首页  >  问答  >  正文

node.js - 如何实现NodeJs防重复提交?

java中可以使用token来进行拦截重复提交问题,

nodejs中是否有相关的插件或者module来解决这个安全问题。。

理论上来说,越简单越好。。。队列什么的,唉。。

参考cnode中《node.js 在服务器端避免重复提交有没有什么好办法吗?》

伊谢尔伦伊谢尔伦2782 天前821

全部回复(2)我来回复

  • 伊谢尔伦

    伊谢尔伦2017-04-17 13:26:58

    最简单的方法是在客户端那边去做限制,在最后一个请求没响应回来之前不能发起另外的请求。

    服务端这边方法也有很多,

    1. 最简单在数据库层面防止重复数据写入

    2. 使用一些 RateLimit 定义规定时间内同一操作不能超过多少次,如果你用的是 Express 可以用这个 https://github.com/nfriedly/express-rate-limit

    3. 正如你提到的采用队列写入

    4. 每次提交都需要申请一个 token ,每个 token 只能用一次

    回复
    0
  • PHP中文网

    PHP中文网2017-04-17 13:26:58

    @KaiChen :3Q 4 U answer ~~

    我用express-rate-limit实现了一下,

    在不改写这个module(以下简称rl)的前提下,会有几个问题:

    1. 首先,看源码,rl将req.ip存放在一个全局变量中,当使用nginx做反向代理的时候,所有的req.ip会指向nginx的代理ip地址,所以这个rl在生产上应该会变现出ip重复问题

    2. 其次,max限制次数的逻辑问题,当设置max大于1之后,次数越多,请求的延迟时间越长,找到一个解决方法是设置【delayMs:0】

    3. 最主要的,他的返回message只支持string型,“first argument must be a string or Buffer”,在res的返回中,我们绝大部分使用的是res.json,纯string数据需要使用正则去进行匹配来判断是否是成功请求。

    回复
    0
  • 取消回复