jquery ajax 数据发布的安全建议?

Posted

技术标签:

【中文标题】jquery ajax 数据发布的安全建议?【英文标题】:Security advice for jquery ajax data post? 【发布时间】:2010-09-07 11:52:35 【问题描述】:

我正在使用 jquery ajax 将更新发布回我的服务器。我担心确保我采取了适当的措施,以便只有我的 AJAX 调用可以发布数据。

我的堆栈是基于 mysql 后端的 Apache 上的 php

非常感谢您的建议!

【问题讨论】:

【参考方案1】:

您页面中的 AJAX 调用可以发出的任何请求也可以由应用程序之外的人发出。如果操作正确,您将无法判断它们是作为 AJAX 调用的一部分从您的 Web 应用还是通过手动/其他方式进行的。

当您说要确保只有 AJAX 调用可以发布数据时,我可以想到两种情况:您不希望恶意用户能够发布干扰其他用户的数据,或者您实际上希望将帖子限制在多请求操作的“流程”中。

如果您关心第一种情况(有人向/作为另一个用户发布恶意数据),无论您是否使用 AJAX,解决方案都是相同的——您只需通过任何必要的方式对用户进行身份验证——通常通过会话 cookie。

如果您关心第二种情况,那么您将不得不在流程的每个步骤中发布一个唯一的令牌,并将预期的令牌存储在服务器端。然后,当发出请求时,检查服务器端是否存在针对正在执行的操作的相应条目,以及预期的令牌是否匹配,以及该令牌是否尚未使用。如果没有,则拒绝该请求,如果有,则将该令牌标记为已使用并处理该请求。

如果您关心的不是这两种情况之一,那么答案将取决于您提供的更多细节。

【讨论】:

会话cookie认证的问题在于它不足以防止CSRF攻击。加入一些额外的安全层是个好主意——无论您是否使用 ajax。 en.wikipedia.org/wiki/Csrf @JesseHallett,嗨,我使用 Spring Securiy 作为我的安全层,并且我正在从客户端发出 AJAX 发布请求。我启用了 CSRF 令牌,因此每个请求都有一个服务器客户端令牌共享,我在 AJAX 发布请求期间传递它。我的程序足够安全吗?【参考方案2】:

使用会话来确保任何 Ajax 帖子都是在经过身份验证的上下文中完成的。将您的 Ajax 代码视为服务器的另一个客户端,这样解决身份验证问题会变得更容易。

【讨论】:

以上是关于jquery ajax 数据发布的安全建议?的主要内容,如果未能解决你的问题,请参考以下文章

原生和jQuery的ajax用法

如何使 JQuery-AJAX 请求同步

JavaScript和Ajax部分

jQuery ajax url 参数 drupal 服务器

在 Javascript/ajax 或 jquery 中提交多个表单

IE8 环境的 JQuery 中的 $.ajax 拒绝访问---解决方案