2017-05-17 60 views
0

我很想知道人们是如何处理这个问题的。Ajax调用WebAPI - 如何防止滥发提交按钮?

我有一个单一的窗体(使用div显示/隐藏部分,因此它看起来像三页)和一个提交按钮的网站。表单通过jQuery AJAX POST提交给我的WebAPI方法。我不希望人们能够在快速提交中多次发送POST。

我在单击它时禁用了Submit按钮,但这并不妨碍有人在控制台中编写脚本来反复调用该方法。他们可以查看JavaScript,查看网址,并发布到它。

我听说过API密钥,但我不认为它们适用于此,因为没有登录到网站。如果有的话,重复请求仍然需要密钥。

我可以使用CAPTCHA我想......但还有哪些其他选项可用?

回答

0

最有用的东西是在表单内部使用csrf标记。 CSRF令牌将在每个表单提交后更新。

您可以轻松地防止重复请求。

在这里找到 https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet

+0

更多信息,请给一些细节,记住这是一个Ajax后。服务器如何知道具有相同标记的后续POST将被忽略?是否有WebAPI DataAnnotation使用? – VictorySaber

+0

@VictorySaber首次提交后必须更改csrf值并重新生成新的CSRF令牌。这里有一个链接可以让你知道你如何处理令牌。 https://gist.github.com/ziadoz/3454607 –

+0

假设是客户端,什么是阻止某人调用令牌生成方法?例如getToken(); postForm(令牌)在控制台? – VictorySaber