You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在浏览器中修改multipart/form-data格式POST请求体测试上传XSS

浏览器内修改上传文件名测试XSS的可用方案

方案1:直接通过Chrome DevTools编辑重发请求(操作最简单)

  • 先在上传页选择任意正常文件名的文件,触发一次上传请求
  • 打开F12 DevTools的「网络」面板,找到对应的multipart/form-data格式的POST上传请求
  • 右键该请求,选择「编辑并重发」,在弹出的请求编辑器中找到请求体里的filename参数,直接将双引号内的原文件名替换为你要测试的XSS payload(比如<svg onload=alert(1)>.jpg)
  • 其余参数、请求头、cookie均无需修改,点击「发送」即可完成提交,自动继承当前会话的所有状态

方案2:JS动态构造带自定义文件名的请求(兼容性最好)

如果浏览器版本不支持编辑重发功能,可直接在页面控制台执行JS代码提交:

  1. 先选中页面的文件上传控件,选择任意本地文件
  2. 在控制台执行如下代码,按需修改对应参数即可:
// 替换为实际的文件上传表单选择器
const uploadForm = document.querySelector('form[enctype="multipart/form-data"]');
// 替换为实际的文件上传字段的name属性值,通常为file、upload等
const fileFieldName = 'file';
// 替换为你要测试的XSS payload文件名
const payloadFileName = '<img src=x onerror=alert(document.domain)>.png';

// 构造新的FormData
const formData = new FormData(uploadForm);
const originalFile = document.querySelector('input[type="file"]').files[0];
// 生成带自定义文件名的新File对象
const customFile = new File([originalFile], payloadFileName, {type: originalFile.type});
// 替换原文件字段
formData.delete(fileFieldName);
formData.append(fileFieldName, customFile, payloadFileName);

// 提交请求,自动携带当前页面的所有cookie和凭证
fetch(uploadForm.action, {
  method: uploadForm.method || 'POST',
  body: formData,
  credentials: 'include'
}).then(res => res.text()).then(result => console.log('上传完成,返回结果:', result));

两种方案均无需修改本地文件、无需安装额外扩展、无需手动处理会话参数和Cookie,所有原表单的业务参数会自动保留。

内容的提问来源于stack exchange,提问作者xsrf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 12:27:02