【问题标题】:How to submit form after ajax test without getting XSS error?如何在ajax测试后提交表单而不会出现XSS错误?
【发布时间】:2011-02-01 17:51:48
【问题描述】:

用户完成并尝试提交表单后,我想查询服务器以查看用户是否已通过身份验证。如果没有,我想弹出一个登录窗口,登录后将关闭该窗口,使表单数据不受干扰并准备好提交。

问题是,如果用户已登录,我想调用 form.submit(),但由于这是来自回调,它会给出 XSS 错误。有没有更好的办法?这是我尝试过的:

function submitForm(form) { form.submit();}

$("#myForm").submit(function () {
                     var thisForm = this;
                     $.getJSON("/url/login_check/", function(data) {
                           if (data.loggedIn === true) { 
                               submitForm(thisForm); 
                            }
                            else {
                               // display login popup
                            }
                     });
                     return false;
  });

【问题讨论】:

  • 你说什么xss错误?
  • 我的浏览器显示此消息:403 Forbidden Cross Site Request Forgery detected。请求中止。
  • 您使用的是什么服务器端堆栈?这听起来很可疑——您不需要显式调用来检查登录状态。
  • django.我正在服务器上进行身份验证,但是如果在用户输入表单数据然后 POST 之后会话超时,则数据消失了。我认为在不更改原始表单及其数据的情况下弹出登录窗口是更好的用户体验。
  • 米奇;在用户登录后简单地捕获表单内容并重新填充表单可能更简单。

标签: jquery json forms xss getjson


【解决方案1】:

您收到 XSS 错误,因为您尝试将 JSON 请求发送到您无法执行的其他域。

您可能需要做的是发送 JSONP 请求(假设您的身份验证服务器支持它们)。这允许您将数据发送到远程域并处理响应。

【讨论】:

  • 我就是这么想的。一个不吸引人的替代方法可能是对服务器进行同步查询。另外,JSONP 不只适用于 GET 吗?
  • 如果您正在进行身份验证,那么 GET 是合适的动词。 POST 仅在服务器状态发生相应更改时才有意义。此外,查询是否同步也没关系......如果它与为您的代码提供服务的域不同,那么您正在尝试 XSS
  • 您对 GET 的看法是正确的。我将身份验证请求与表单的 POST 混淆了。但是表单的域和 getJSON 请求是相同的 - getJSOn 函数应该只是从它所在的同一页面提交表单。所以我看不到不同的域在哪里。
  • 我认为XSS错误可能是由于从弹出窗口登录而不是由于从getJSON函数提交表单。
猜你喜欢
  • 2014-08-14
  • 1970-01-01
  • 2015-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多