前端怎么防止接口请求被重放攻击?
最近在做支付相关的功能,后端要求每个请求都要防重放,但我作为前端不太清楚该怎么配合。我试过加时间戳,但好像还是能被截获重放。
现在用的是 Vue3 + Axios,下面是我目前的请求封装,是不是缺了什么关键的东西?
<script setup>
import axios from 'axios'
const sendSecureRequest = async (data) => {
const timestamp = Date.now()
const res = await axios.post('/api/pay', {
...data,
timestamp
})
return res.data
}
</script>
省事的话直接看代码,请求拦截器里搞定:
后端那边要用 Redis 把用过的 nonce 存起来,过期时间设成跟时间戳校验窗口一致,比如5分钟。这样同一个请求就算被抓包,5分钟内重放会被 nonce 拦截,5分钟后重放会被 timestamp 拦截。