2012-08-29 13 views
1

我最近創建了一個具有使用jQuery的AJAX功能的投票/提醒功能的網站。問題是:任何人都可以投票。我不要求訪問者登錄,我不追蹤他們的IP,我甚至不存儲長期cookie。通常(不要笑),當用戶投票時,我將他們投票的項目的ID存儲在JavaScript數組中。每當他們嘗試投票時,腳本通過檢查陣列中的ID來檢查他們是否最近投票給出了給定的項目。如果他們有,它只是給他們一個警告對話框。否則,它會投票。所以不用說,用戶必須做的所有事情都是刷新頁面。我有可能阻止黑客使用Web控制檯通過JavaScript重複調用upvote(AJAX)函數嗎?

我決定看看會發生什麼,如果我注入了一些JavaScript(在網址欄或Web控制檯中),並且我沒有真正驚訝地發現投票次數與您想要的一樣快很簡單:

for (var i = 0; i < 100; i++) { vote(itemID); } 

(這很好)。我不確定爲什麼陣列不會阻止它,但那並不重要;它總是很容易被利用,對吧?我的意思是 - 你甚至可以用一些JS編寫一個小小的HTML文檔,它可以根據需要多次調用我網站上的投票頁面。

所以我想解決這個沒有太多的麻煩。是否有可能在JavaScript中創建一個不可變的變量?一個常數(儘管如果有一個常數只能改變一次的話,這真的會有幫助)?在某種程度上解決這個問題的最簡單方法是保持ID保持陣列半常數:不能被刪除,但可以被添加到。任何建議或解決方案或解釋非常感謝。

回答

4

不,如果用戶想通過搞亂他們的客戶端代碼來作弊,他們可以做到這一點。這就像遊戲的作弊補丁。

你現在正在做的事情是非常合理的,以避免意外重複的投票,如果你覺得這是不夠的(例如,如果票是真的很重要),你需要在服務器端採取措施。跟蹤IP或設置Cookie也不起作用,這也依賴於客戶端合作。您必須對用戶進行身份驗證,並確保每個人只需在您的數據庫中存儲一些內容即可投票一次。

+1

除了這個評論,如果選票很重要,你將不得不認真考慮上層數學,以確保反博彩措施捕捉到壞人。標準偏差,智能登錄跟蹤等。如果通過垃圾郵件投票有什麼收穫,您至少需要訪問數據庫和用戶系統。 –

2

我不知道你爲什麼不跟蹤IP,如果你跟蹤IP,那麼你可以檢查IP是否投票過相同的項目,或者IP投票過於頻繁。

當然你也需要考慮到人們可能共享相同的IP來瀏覽你的網站。

相關問題