2013-11-24 134 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一起發佈,以便用戶不得不重新加載頁面以便第二次更新計數器。另外,(可能很明顯)如果你的用戶不是匿名的,你可以忽略他們已經造成的增量。