搜尋

首頁  >  問答  >  主體

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

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

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

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

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

伊谢尔伦伊谢尔伦2782 天前823

全部回覆(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
  • 取消回覆