0

웹 페이지에 다양한 클릭을 등록하고 싶습니다. 요소의 가시성을 토글합니다. 나는 특정 페이지에서 변경 작업 키 - 값 쌍을 저장하는 actions 속성과 Impression 모델을 가지고있다.AJAX/업데이트 작업을 통해 페이지에 라우팅되지 않는 클릭을 안전하게 등록하는 방법은 무엇입니까?

클릭 수는 기록되지 사용자로부터 온다. 클릭 이벤트에

나는이 기능을 가진 기록을 갱신하고 있습니다 :

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

나는이 필요한 기능입니다 생각하지 않습니다. 어쩌면 당신은 너무 많이 생각할 것입니다 :)

Google Analytics에서도 이론적으로 방문자가 자신의 행동을 조작하는 것을 막을 수 없습니다. 콘솔에서 원하는 모든 이벤트를 푸시 할 수 있습니다.

또한 분석 도구가 100 % 안전하고 정밀 할 필요는 없습니다. 소음이 있어야합니다, 당신은 그들을 완화시킬 수는 있지만 실제로 피할 수는 없으며, 합리적인 비용으로 피할 수는 없습니다.

+0

정말 좋은 지적입니다. 고마워요. –

0

current_user에 속하는 노출에서 Impression을 찾아야합니다.

예 :

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

로그인하지 않은 것을 포함하여 모든 방문자의 클릭 수가 등록됩니다./ –

+0

@FellowStranger 따라서 노출을 업데이트 할 수없는 사람은 누구입니까? – xdazz

+0

누구나 웹 페이지 방문자를 지정할 수 있습니다. 각 페이지 요청마다 'Impression' 레코드가 생성 된 다음 리디렉션이나 새 템플릿 렌더링이 포함되지 않은 해당 페이지에서 수행 한 작업을 등록하려고합니다. 그리고이 동작들은'impress' 레코드에'actions' 속성에'Hash'라는 이름으로 저장됩니다. –