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

Stripes表单POST请求被接受为GET的JS端修复方案咨询

根本解决方案(必须优先落地,是解决渗透风险的核心)

  • 前端限制无法完全阻挡恶意构造的GET请求,必须首先在服务端添加请求方法校验,直接拒绝所有非POST类型的接口请求。针对你使用的Stripes框架,可直接在对应Action类或方法上添加@HttpMethod(HttpMethod.POST)注解,强制要求接口仅接收POST请求,从根源避免GET请求被处理的问题。

前端修复方案(解决正常使用场景下的请求方法异常问题)

1. 修复Stripes表单原生配置(优先采用,比动态修改更稳定)

之前用setAttribute('method', 'POST')出现故障,通常是因为动态修改属性的时机在表单提交逻辑之后,或者和Stripes框架自身的表单处理逻辑冲突,直接在<stripes:form>标签上原生声明method即可,无需JS动态修改:

<stripes:form autocomplete="off" beanclass="com.demo.SubmitEmployeeAction" id="submitEmployeeForm" name="submitEmployeeForm" method="post">

2. 清理提交逻辑中的URL参数拼接

你现有代码里把submitEmployeeForm参数拼在了action的URL中,即使使用POST方法,这个参数依然会暴露在URL里,存在泄露风险。把这个参数移到表单隐藏域中:
首先在表单内添加隐藏域:

<stripes:hidden name="submitEmployeeForm" value="" />

然后修改JS提交逻辑,删除action后的参数拼接:

$("#submitEmp").click(function(event){
    event.preventDefault();
    document.submitEmployeeForm.action='SubmitEmployee.action';
    $("#submitEmp").attr('disabled','disabled');
    $("#submitEmployeeForm").submit();
});

3. JS层面兜底强制POST(可选,作为额外防护)

如果需要额外加一层JS校验,可监听表单submit事件强制校验请求方法:

$("#submitEmployeeForm").on('submit', function(e) {
    // 强制指定请求方法为POST
    this.method = 'POST';
    // 额外校验:禁止非POST请求提交
    if (this.method.toUpperCase() !== 'POST') {
        e.preventDefault();
        return false;
    }
});

按上述方案调整后,正常用户操作发送的请求全部为POST方法,参数都封装在请求体中不会暴露在URL里,配合服务端的方法校验即可完全解决本次渗透测试发现的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:27:03