【问题标题】:Pen testing issue request designed as POST is accepted as GET设计为 POST 的渗透测试问题请求被接受为 GET
【发布时间】:2021-08-18 12:49:39
【问题描述】:

我正面临如下渗透测试问题。有没有办法让我们可以从 java 脚本端将方法限制为 POST。试过 .setAttribute('method', 'POST') 但这会破坏应用程序。有没有其他方法可以实现这一点,以便解决渗透测试问题?我正在使用条纹表单和按钮,如下面的 sn-p 所示。

设计为 POST 的请求被接受为 GET . 应用程序将接受并处理作为 GET 发送的请求,即使它被设计为用作 POST。 GET 请求公开任何包含的参数 浏览器历史记录、打印页面和服务器日志。 POST 可以防止这些暴露。

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

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

        });

<button id="submitEmp" class="grayBtnCancel"  style="font-size: 93%;" >Submit Employee</button> 

【问题讨论】:

  • 令人困惑,但您可以使用 NGINX 阻止这些请求...仅在可能更改设置/等的页面上允许它...如果您还没有...插入 nginx 后面的服务器并设置在那里保护你。
  • 您可以使用 Stripes 拦截来确保 HTTP 方法正确。在我的 Stripes 应用程序中,这是基于 Action 方法(“事件”方法)上的注释,因此对于需要 POST 的 Action/事件目标的传入 HTTP 请求可能会被拒绝。它不会自动发生;应用程序必须主动阻止它。

标签: javascript post get request pen


【解决方案1】:

问题是:

设计为 POST 的请求被接受为 GET

您对客户端所做的任何更改以尝试使其仅发送 POST 不会更改服务器将接受的内容。

你不能用客户端代码欺骗这个测试。

要阻止测试系统抱怨,请更改服务器,使其针对该 URL 的 GET 请求抛出 405 Method Not Allowed 响应。

【讨论】:

  • Stripes 框架(有点旧,但仍然有效)有充足的设施来执行诸如 HTTP 方法要求之类的规则。 e:不言而喻,它不一定简单,因为每个应用程序都是不同的。
  • @Quentin 您能否详细说明一下“要阻止测试系统抱怨,请更改服务器,使其针对该 URL 的 GET 请求抛出 405 Method Not Allowed 响应。”
  • @user12872106 关键是由服务器上的代码来强制执行HTTP方法要求。这究竟是如何工作的是一个很大的话题。如果你的渗透测试表明服务器代码没有执行,那么服务器就坏了。
猜你喜欢
  • 2011-08-09
  • 1970-01-01
  • 2018-11-13
  • 2021-08-02
  • 2018-04-04
  • 2013-10-03
  • 2015-07-01
  • 1970-01-01
  • 2019-05-01
相关资源
最近更新 更多