2012-08-29 1 views
1

최근 jQuery의 AJAX 기능을 사용하는 투표/상향 투표 기능이있는 웹 사이트를 만들었습니다. 캐치는 누구나에 투표 할 수 있습니다. 방문자를 로그인 할 필요없이 IP를 추적하지 않으며 장기 쿠키를 저장하지도 않습니다. 일반적으로 (웃지 마세요), 사용자가 어떤 것에 투표 할 때, 나는 그들이 투표 한 항목의 ID를 JavaScript 배열에 저장합니다. 그들이 투표를 시도 할 때마다 스크립트는 최근 ID에 대한 배열을 검사하여 주어진 항목에 대해 투표 한 적이 있는지 확인합니다. 그들이 가지고 있다면, 그것은 단지 그들에게 경고 대화를 제공합니다. 그렇지 않으면 투표를합니다. 따라서 모든 사용자가 다시 투표하려면 페이지를 새로 고침해야한다는 것은 말할 필요도 없습니다.해커가 웹 콘솔을 사용하여 JavaScript로 upvote (AJAX) 함수를 반복적으로 호출하는 것을 방지 할 수 있습니까?

자바 스크립트 (URL 표시 줄 또는 웹 콘솔)를 삽입하면 어떤 일이 발생하는지 알기를 결심했으며, 매우 빠르게 원하는만큼 여러 번 투표하는 것이 매우 쉽습니다. :

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

(좋았습니다). 배열이 왜 멈추지 않는지 모르겠지만 그건 중요하지 않습니다. 이것을 항상 쉽게 이용할 수 있습니다. 맞습니까? 내 말은 - 당신은 원하는만큼 여러 번 내 웹 사이트에서 투표 페이지를 호출하는 JS로 약간의 HTML 문서를 작성할 수도 있습니다.

그래서 나는이 문제를 너무 곤란없이 해결하고 싶습니다. 자바 스크립트에서 불변 변수를 만들 수 있습니까? 상수 (한 번만 변경할 수있는 상수와 같은 것이 있다면 정말 도움이 되겠지만)? 이것을 어느 정도 수정하는 가장 쉬운 방법은 ID 유지 배열을 준 상수로 유지하는 것입니다 : 삭제할 수 없지만 추가 할 수 있습니다. 모든 제안이나 해결책 또는 설명은 크게 감사하겠습니다.

답변

4

아니요, 사용자가 클라이언트 측 코드를 망치고 싶으면 할 수 있습니다. 이것은 게임용 치트 패치와 같습니다.

우연한 중복 투표를 피하기 위해 지금하고있는 일은 충분하지 않습니다 (예를 들어 투표가 정말로 중요 할 때). 서버 측에서 조치를 취해야합니다. 추적 IP 또는 설정 쿠키도 작동하지 않습니다, 이것은 클라이언트 측의 협력에 의존합니다. 사용자를 인증하고 데이터베이스에 무언가를 저장하여 모든 사람이 한 번만 투표하도록하십시오.

+1

득표가 중요 할 경우 반 도핑 조치가 악의적 인 사람들을 포착 할 수 있도록 상위 수준의 수학을 진지하게 고려해야합니다. 표준 편차, 지능형 로그인 추적 등. 스팸 투표로 얻을 수있는 것이 있다면 최소한 데이터베이스와 사용자 시스템으로 이동해야합니다. –

2

내가 IP를 추적하면 IP를 추적하지 않는 이유를 모르겠지만 IP가 이전에 동일한 항목을 투표했는지 또는 IP가 너무 자주 투표하는지 확인할 수 있습니다.

물론 사람들이 동일한 IP를 공유하여 사이트를 탐색 할 수도 있다는 점을 고려해야합니다.

관련 문제