2013-11-24 95 views
2

我有一个页面,这将触发一个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,检查频率等等等等,但它们非常无效。

+0

为了清楚起见:你可以添加如何等方法是“无效”?从我的个人经验来看,我知道有人窃取您的数据的行为并不多;如果它在网上,任何人都可以阅读,他们可以窃取它。 (“它在网上,所以它必须是免费的”是他们通常的防守......) – usr2564301

回答

0

可能没有太多的事情可以完全阻止它,但是可以结合你试图让它变得更加困难的方法。最终,您可以考虑生成一些独特的,一次性使用的令牌,并将每次刷新与共享操作的post_id一起发布,以便用户不得不重新加载页面以便第二次更新计数器。另外,(可能很明显)如果你的用户不是匿名的,你可以忽略他们已经造成的增量。