首页 > 解决方案 > 如何防止人们利用我的 Rest Api

问题描述

假设我正在制作一个音乐应用程序,用户可以在其中上传音乐并收听它们。如果他们听音乐至少 30 秒,则播放计数器会增加。所以代码看起来像:

private plays_listener(){
        let hasViewsUpdated = false;
        let counter = 0;
        this.audio.addEventListener("timeupdate", ()=>{
            if(!hasViewsUpdated){
                counter += 0.22;
                if(counter > 30){
                    hasViewsUpdated = true;
                    updatePlays()
                }
            }
        })
    }

updatePlays功能将向我的服务器发送请求并更新播放。

async function updatePlays(){
  await fetch("/api/track/update/plays", {
      method: "POST",
      headers: {
        'Content-Type': 'application/json',
        "CSRF-Token": <string>Cookies.get("XSRF-TOKEN"),
        
      },
      "body": JSON.stringify({song_id: "kjkfsd_aa"})
  })
}

但是您仍然可以从开发者控制台向此 url 发送相同的发布请求,并且可以在不实际播放歌曲的情况下增加播放量。像这样:

在此处输入图像描述

所以 api 仍然会认为这是一个有效的请求,因为 csrf 令牌和会话令牌也将被发送。那么我该如何防止这种情况发生。

标签: javascriptnode.jsexpresssecuritycsrf

解决方案


推荐阅读