如何防止同一网站伪造?

时间:2013-11-24 20:28:29

标签: javascript

我有一个页面会在用户共享帖子后向服务器发出ajax请求以增加值:

FB.ui({
   method: 'feed',
   name: 'Share',
   link: 'http://{{ request.META.HTTP_HOST }}{% url "facebook_competition" %}',
   }, function(response){
      if (response && response.post_id) {
         $.post('http://mysite.net/shared/', {post_id:response.post_id});
      }
});

我的网站受CSRF令牌保护,如下所示:

jQuery(document).ajaxSend(function(event, xhr, settings) {
    if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
        var csrftoken = $('meta[name="csrf-token"]').attr('content');
        //var csrftoken = $.cookie('csrftoken');
        xhr.setRequestHeader("X-CSRFToken", csrftoken);
    }
})

但是如何有效地阻止用户加载页面然后在控制台中触发ajax请求,例如:

for (var i=0; i<100; i++){
    $.post('http://mysite.net/shared/', {post_id:1234});
}

我考虑过IP,频率检查等,但它们效率很低。

1 个答案:

答案 0 :(得分:0)

可能没有很多东西可以完全阻止它,但你可以结合你试图使它变得更加困难的方法。最终,您可以考虑生成一些独特的,一次性使用的令牌,每次刷新都应与共享操作的post_id一起发布,这样您的用户就必须重新加载您的页面才能再次更新您的计数器。 / p>

此外,(可能很明显)如果您的用户不是匿名用户,您可以忽略他们已经造成一个人的反增量。