2008-09-01 11 views
19

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

我的堆栈是PHP上的Apache对MySQL的后端。

忠告非常感谢!

回答

27

AJAX在您的页面中调用的任何请求都可以由应用程序之外的某个人做出。如果操作正确,您将无法确定它们是否是作为来自您的Web应用程序的AJAX调用的一部分或通过手动/其他方式生成的。

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

如果您关注第一个案例(某人向另一个用户发布恶意数据),无论您是否使用AJAX,解决方案都是相同的 - 您只需通过任何必要的方式验证用户身份 - - 通常通过会话cookie。

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

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

+2

会话cookie身份验证的问题在于它不足以防止CSRF攻击。放入一些额外的安全层是一个好主意 - 无论你是否使用ajax。 http://en.wikipedia.org/wiki/Csrf – 2010-03-12 22:01:46

5

使用会话以确保任何Ajax帖子都在经过身份验证的上下文中完成。将您的Ajax代码看作您的服务器的另一个客户端,以这种方式处理身份验证问题变得更加容易。