在以下系统中防止手动POST请求

时间:2014-04-09 14:48:27

标签: javascript php ajax security csrf

我的PHP网站上有一个跟随系统,如twitter。要跟随另一个用户,用户将单击他们想要关注的用户的个人资料上的关注按钮。

然后我发送一个ajax post请求,其中包含他们想要关注的用户的ID。

我试图通过在浏览器控制台中写一下来解决如何防止用户垃圾邮件跟踪所有人:

for(var i = 0; i<10000000; i++){
     followUser(i) // followUser is the ajax request
}

我建议的解决方案是:

为每个请求添加一个使用令牌,并检查会话中存储的令牌,如CSRF /双提交保护。

该解决方案有什么问题吗?我看过使用匿名JavaScript函数,但在服务器端而不是客户端上防止这些事情似乎更安全。

1 个答案:

答案 0 :(得分:1)

  

该解决方案有问题吗?

如果将令牌存储在每个文档的DOM / JS上下文中,那么您可能会破坏应用程序的导航和多选项卡使用。 (例如想象跟随某人然后单击上一页上的“返回并关注某人”。旧页面的令牌现在无效且操作失败。)这就是单次使用CSRF令牌通常是一件坏事。

  

在服务器端防止这些事情而不是客户端似乎更安全。

确实,但是一次性令牌并不能真正阻止用户发出大量请求,这只是意味着他们每次都必须抓取一个新令牌。

听起来你真正需要的是某种服务器端速率限制解决方案。这可以在服务器级别(mod_evasive等)和/或应用程序中实现(如果您希望有针对性地限制被识别为敏感的特定功能,则必需)。

你的威胁模型是什么?让一个帐户跟随每个人并不会立即看起来像是攻击;什么是负面影响以及攻击者为什么要这么做?如果它类似于“通过向所有人发送跟踪通知来引起麻烦”,那么更好的答案可能在于提供更好的工具来管理/忽略通知,例如。