前端请求被IPS拦截,怎么排查和绕过?
我们线上 Vue 项目最近频繁出现接口请求失败,运维说是因为 IPS 检测到“可疑行为”给拦了。但我只是正常发个 POST 请求带点用户输入,为啥会被当成攻击?试过对参数 encodeURIComponent 也没用。
这是我的请求代码:
<script setup>
import axios from 'axios'
const submitForm = async (input) => {
try {
await axios.post('/api/submit', {
comment: input.value // 用户输入的内容
})
} catch (err) {
console.error('提交失败', err)
}
}
</script>
现在一提交就返回 403,但本地和测试环境都正常,只有生产环境出问题。是不是我漏了什么安全头?还是得跟安全团队沟通规则?
先说排查:
让你运维查一下IPS的拦截日志,看具体是哪个规则触发的、拦截的关键字是什么。一般日志里会记录匹配的规则和请求内容,这样你就知道是哪个词“中奖”了。
常见被拦截的关键词大概有这几类:SQL注入相关的(比如select、union、insert、drop),XSS相关的(比如script、javascript:、onerror),还有一些特殊符号组合。
如果是这种情况,有几个思路:
一是调整输入方式,比如把敏感词拆分传输,后端再拼接回来,不过这个得后端配合改。
二是看看能不能在请求头里做点文章,有些IPS会检查Referer或者自定义头,加一下可能有用:
三是联系安全团队,把你们的接口加到白名单里,或者让他们调整一下规则范围。毕竟这只是正常的业务请求,没理由被拦。
本地和测试环境正常说明代码逻辑没问题,就是生产环境的IPS规则更严格导致的。最直接的办法还是找运维看日志,能省很多猜的时间。
希望能帮到你,有其他问题再聊。