2015-06-02 62 views
2

在我的網站上,我爲博客文章創建了評論部分。用戶可以寫評論,點擊一個按鈕,並將AJAX請求發送到包含JSON數據的PHP。 PHP將處理&驗證數據,然後將其插入到數據庫中。成功後,所有評論都從數據庫中檢索出來,並使用JQuery重新加載頁面的所有評論。防止假循環Ajax請求到PHP

問題是任何人都可以前來使用瀏覽器的控制檯僞造一個AJAX請求,填寫他們自己的JSON並將請求發送到PHP。如果這樣做,所發生的只是我的客戶端驗證是無用的。服務器端驗證仍然有效。但是,還有一個更大的問題。

for(var i = 0; i < 10000; i++) { 
    //ajax request 
} 

用戶可以很容易地將數千和數千記錄立即插入到我的數據庫中。

有沒有人有任何建議,我可以如何防止這樣的事情發生?它必須涉及在服務器端創建一些無法被用戶猜到的東西,並且在AJAX請求期間以某種方式檢查它。我只是不確定如何去做這件事。

感謝您的幫助。

+2

有人可以做同樣的事情,只需查看發送ajax請求的地址並用任何語言編寫腳本(如shell腳本和捲曲)發送連續的數據請求。 Google對PHP的速率限制。 – Anthony

回答

0

我會添加一個會話變量,其中包含用戶發佈的帖子數,給定很多頁面,您可以形成類似$SESSION['page_id_total_nr_comments']的東西,並跟蹤此數字,添加一個配置變量,讓用戶添加最多X條評論每篇文章,例如:

function canUserAddComment($pageId){ 
    $maxAllowed =......; 
    if(!isset($SESSION[$pageId+'_nr_comments'])){ 
     $SESSION[$pageId+'_nr_comments'] = 0; 
    } 
    if($SESSION[$pageId+'_nr_comments']< $maxAllowed){ 
     $SESSION[$pageId+'_nr_comments']++; 
     return true; 
    } 
    return false; 
    } 

OR

保存時得到的評論數量上的文章已經取得和使用決定是否公頃可以(用配置變量仍然)再拍

1

要在這方面保證安全,唯一的方法就是添加驗證碼。

這會阻止大量/自動化的帖子。一個可能的庫是Securimage。使用和整合起來很簡單。您可以在10分鐘內使用您的AJAX內容運行它。

依賴於其他方式,如cookie或客戶端驗證某種類型是有風險的,如果可能的話。對於instnace KA_lin的解決方案可能會在5分鐘內受到影響:惡意用戶可能會發送僞造的cookie,其頁數始終爲0,因此將始終允許發佈。或者更糟糕的是,他可能會創建一個小程序,該程序將發送到您的頁面而不發送任何cookie。上面的代碼將創建一個新的cookie並接受他的帖子,每次...