axios发送post里的数据带有XSS攻击的字符串会被拦截?

使用axios发送post请求,请求参数如下:

{
    "body": {
        "name": "test-xss18",
        "description": "<IMG src=javascript:alert('XSS')>",
    }
}

在axios的拦截处进行监听,可以发现请求响应直接走向错误处理,理论上该请求不应该报错(非后台接口错误,因为请求并没有发到后台),走向正常的响应处理。

如果把请求数据中description的值改为其他文本,则请求正常。但业务代码并没有做任何特殊处理,不知道axios源码里是否有特殊处理

只要数据带上了可能存在XSS注入风险的文本就会出现该情况,比如<button>x</button>正常,
<button onclick="javascript:alert()">x</button>报错

线上环境数据未能采集,本地调试时报错内容是504 (Gateway Timeout)

阅读 5.6k
2 个回答

我觉得axios不应该会做这样的处理,你可以对https://www.lilnong.top/cors/1010000023025316这个接口请求一下看看。

axios({
    url: `https://www.lilnong.top/cors/<button onclick="javascript:alert()">x</button>`,
    method: 'post',
    data:{
        a: '<button onclick="javascript:alert()">x</button>'
    }
})    

axios 没做任何处理,这应该是你后端的问题。

axios 相关源码:

// 所在文件 /lib/adapters/xhr.js

module.exports = function xhrAdapter(config) { 
    return new Promise(function dispatchXhrRequest(resolve, reject) { 
        var requestData = config.data;
        var requestHeaders = config.headers;
        
        /* 省略事件监听的相关代码 */
         
        if (requestData === undefined) { 
            requestData = null; 
        } 
        
        request.send(requestData);  // request 是一个 XMLHTTPRequest 对象
    }); 
};
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题