【问题标题】:ajax POST handler loopingajax POST 处理程序循环
【发布时间】:2015-10-31 07:14:09
【问题描述】:

我正在尝试设置一个基本的 ajax 提交处理程序来修改表单(我正在写关于 CSRF 漏洞的课程),但页面一直在循环。这是我一直在修改的示例代码,它基于来自 http://api.jquery.com/jQuery.post/ 的代码:

 <!DOCTYPE html>
 <html>
 <body>

 <form id="hidden_form" target="blahblah.com"> </form>

 <script>
 //Attach a submit handler to the form
 $( '#hidden_form' ).submit(function( event ) {

      //stop form from submitting normally
      event.preventDefault();

      //set new target for the form
      var $form = $( this ),
        url = "http://192.168.101.250/mutillidae/index.php?page=add-to-your-blog.php&csrf-token=SecurityIsDisabled&blog_entry=example+text&add-to-your-blog-php-submit-button=Save+Blog+Entry"

      //capture the response but do nothing with it
      var posting = $.post( url );
 });
 </script>

 <script>
      $( '#hidden_form' ).submit();
 </script>

 </body>
 </html>

当我使用浏览器在本地加载此文件时,选项卡标签在 /path/to/file.html 和“连接”非常快,但我知道请求永远不会被发送出去,因为我有 burp 代理拦截所有流量并且它没有捕获任何东西。

那我做错了什么?我希望 ajax 处理程序向指定的 url 发送一个 POST 请求,但它永远不会被发送出去

编辑:我已将第二个脚本更改为调用处理程序而不是实际表单,但仍然没有通过网络发送流量?

【问题讨论】:

  • 您没有阻止默认表单提交的发生,因此页面只是不断刷新。 (提示:HTMLFormElement.submit() 绕过 jQuery 绑定的提交事件)
  • “event.preventDefautl()”不会阻止默认表单提交吗?
  • 如果该事件处理程序被调用过,它会。
  • 感谢您的帮助,我对 JQuery/Ajax 几乎没有经验,那么如何确保调用该处理程序?

标签: javascript php ajax csrf


【解决方案1】:

直接在表单元素节点上调用 .submit() 不会触发提交事件,而是绕过所有事件处理程序直接提交表单。您应该改为调用触发事件处理程序的方法的 jQuery 形式。

$( '#hidden_form' ).submit();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-05
    • 2012-03-05
    • 1970-01-01
    • 2023-03-23
    • 2012-01-07
    • 2013-01-08
    • 2012-11-26
    • 2011-07-29
    相关资源
    最近更新 更多