0

我想在網頁上註冊各種點擊,例如切換元素的可見性。如何通過AJAX /更新操作安全地註冊頁面上的非路由點擊?

的點擊來自未登錄用戶。

我有一個Impression模型與actions屬性存儲中的某一頁上進行操作鍵 - 值對。

上的click事件我更新此功能的記錄:

function sendAjax(id, data) { 
    $.ajax({ 
     type: "PATCH", 
     url: '/impressions/update', 
     data: {'impression_id' : id, 'actions' : data}, 
     success: function(events){ 
     } 
    }); 
} 

但我意識到這不是安全可言,用戶理論上可以更新自己想要的任何記錄。

我怎麼能更安全地做到這一點,我能以任何方式利用Rails的protect_from_forgery與我的用例?

+0

我最初的想法是添加一個額外的散列值,您只需使用您擁有的祕密令牌和您想保護的操作生成一個額外的散列值,然後在保存展示前對其進行驗證,但仍然無法阻止用戶從請求發送哈希以及有效修改任何其他記錄,但至少您會保護自己免受隨機記錄的侵入。 – acadavid

+0

您正在做某件事。我*可以*做的是加密我正在更新的記錄的ID,以便它不是一個普通的可替換數字,然後在更新時解密它。 –

回答

1

我不認爲這是一個必要的功能。也許你覺得太多:)

即使在谷歌分析,你不能阻止訪客操縱他的行動,理論上。人們可以在控制檯中推動他想要的任何事件。

此外,分析工具無需100%安全和準確。必須有噪音,你可以放鬆他們,但不能真正避免他們,或以合理的成本避免他們。

+0

這是一個很好的觀點,非常感謝。 –

0

您只需從current_user的印象中找到Impression即可。

例子:

def update 
    @impression = current_user.impressions.find(params[:impression_id]) 
    # ... 
end 
+0

我在爲所有訪客都記錄點擊,包括未登錄...:/ –

+0

@FellowStranger那麼誰不能更新印象呢? – xdazz

+0

每個人都可以,任何給定的訪問者的網頁。爲每個頁面請求創建一個「Impression」記錄,然後我希望註冊在該頁面上採取的不包括重定向或呈現新模板的操作。並且這些操作在早先創建的「Impression」記錄中被保存在'action'屬性中作爲'Hash'。 –

相關問題