최근 jQuery의 AJAX 기능을 사용하는 투표/상향 투표 기능이있는 웹 사이트를 만들었습니다. 캐치는 누구나에 투표 할 수 있습니다. 방문자를 로그인 할 필요없이 IP를 추적하지 않으며 장기 쿠키를 저장하지도 않습니다. 일반적으로 (웃지 마세요), 사용자가 어떤 것에 투표 할 때, 나는 그들이 투표 한 항목의 ID를 JavaScript 배열에 저장합니다. 그들이 투표를 시도 할 때마다 스크립트는 최근 ID에 대한 배열을 검사하여 주어진 항목에 대해 투표 한 적이 있는지 확인합니다. 그들이 가지고 있다면, 그것은 단지 그들에게 경고 대화를 제공합니다. 그렇지 않으면 투표를합니다. 따라서 모든 사용자가 다시 투표하려면 페이지를 새로 고침해야한다는 것은 말할 필요도 없습니다.해커가 웹 콘솔을 사용하여 JavaScript로 upvote (AJAX) 함수를 반복적으로 호출하는 것을 방지 할 수 있습니까?
자바 스크립트 (URL 표시 줄 또는 웹 콘솔)를 삽입하면 어떤 일이 발생하는지 알기를 결심했으며, 매우 빠르게 원하는만큼 여러 번 투표하는 것이 매우 쉽습니다. :
for (var i = 0; i < 100; i++) { vote(itemID); }
(좋았습니다). 배열이 왜 멈추지 않는지 모르겠지만 그건 중요하지 않습니다. 이것을 항상 쉽게 이용할 수 있습니다. 맞습니까? 내 말은 - 당신은 원하는만큼 여러 번 내 웹 사이트에서 투표 페이지를 호출하는 JS로 약간의 HTML 문서를 작성할 수도 있습니다.
그래서 나는이 문제를 너무 곤란없이 해결하고 싶습니다. 자바 스크립트에서 불변 변수를 만들 수 있습니까? 상수 (한 번만 변경할 수있는 상수와 같은 것이 있다면 정말 도움이 되겠지만)? 이것을 어느 정도 수정하는 가장 쉬운 방법은 ID 유지 배열을 준 상수로 유지하는 것입니다 : 삭제할 수 없지만 추가 할 수 있습니다. 모든 제안이나 해결책 또는 설명은 크게 감사하겠습니다.
득표가 중요 할 경우 반 도핑 조치가 악의적 인 사람들을 포착 할 수 있도록 상위 수준의 수학을 진지하게 고려해야합니다. 표준 편차, 지능형 로그인 추적 등. 스팸 투표로 얻을 수있는 것이 있다면 최소한 데이터베이스와 사용자 시스템으로 이동해야합니다. –