2012-03-18 1 views
1

저는 건물에있는 사기를 방지하기 위해 노력하고 있습니다. 프로젝트는 여러 웹 사이트가 포함 된 게임입니다.방화범이나 다른 콘솔을 사용하는 방문자가 사기를 당하지 않도록하십시오.

각 웹 사이트는 게임의 상태 업데이트를 위해 서버의 웹 페이지에 대한 각 페이지 뷰와 함께 ajax 확인을 수행합니다. 응답 페이지에서 www.domain.com/response.cfm (coldfusion)은 일반적으로 아무 것도 반환하지 않지만 게임 시간 내에 특정 시점에서는 정보가있는 JSON 문자열을 표시합니다. 이 정보는 웹 사이트에 포함 된 스크립트에 의해 사용됩니다.

그래서 웹 사이트 A는 100 회 (모든 페이지) 조회되었으며 100 건의 아약스 호출이 생성되었습니다.

내가 가진 문제는 로봇이 아약스 대상을 너무 빠르고 빠르게 확인할 수 있다는 것입니다. 이제 로봇을 감지하거나 세션을 사용하거나 쿠키를 확인하여 어려울 수 있습니다. 그러나

가장 큰 문제는 방화범이 끌리는 스크립트 콘솔에서 많은 것을 할 수 있다는 것을 알았습니다. 또는 사파리 콘솔. 아마 크롬도.

이 콘솔을 사용하면 크로스 도메인 제한을 회피 할 수 있습니다. 필자는 Ajax 페이지에 대한 호출을 두 번 수행하는 간단한 스크립트를 만들었고 동일한 도메인으로 먼저 이동 한 다음 콘솔을 사용할 때 크로스 도메인 제한이 없다. 그리고 모든 종류의 자바 스크립트를 실행합니다. 그래서 본질적으로 저와 같은 누군가는 자바 스크립트 콘솔을 사용하여 게임에서 사기를 저지를 수 있습니다.

내 질문은 지금 : 누구든지 이것을 방지하는 방법을 알고 있습니까? 나는 콘솔의 사용을 막으려 고했지만 나는 할 수 있다고 생각하지 않는다. 콘솔이 활성화되어 있는지 감지하고 MY 스크립트를 비활성화하여 게임이 작동하지 않을 수도 있습니다. 하지만 그들은 수동으로 콘솔에 스크립트 소스를로드 할 수 있고 게임이 작동한다고 생각합니다.

콘솔처럼 보이는 것은 아름답지만, 지금은 나에 대한 악몽은 내가 만들고있는 게임에서 사람들을 속이는 것을 방지합니다.

희망 사항은 누구나 가지고 있습니다.

ps : 물론 나는 속임수를 탐지하기 위해 서버 측 검사를 구현하려고하지만 대부분 실시간으로 수행되지 않습니다. 업데이트 19/3/2012


내가 막으려하고있는 사기는 게임의 다음 단계를 위해 로직을 생성하는 페이지를 폴링하여 게임에서 부정 행위를하는 것입니다. 게임이 실행되는 웹 사이트의 변경을 유발하는 json 코드를 생성하는 서버 스크립트 페이지입니다. 귀하의 정보를 얻으려면 관련 웹 사이트에 google Analytics와 같은 헤더가있는 스크립트가 있으므로 각 페이지 뷰마다 내 서버와 통신합니다.

해당 서버 페이지가 폴링을 통해 사기꾼의 지식이나 진보를 얻을 수있는 정보를 공개 할 수 있습니다.

그래서 사람들은 특정 시간에 정보를 공개 할 서버 페이지를 모니터링하여 다른 열렬한 플레이어보다 앞서 지식을 얻지 못하게해야합니다. 나는 그들에게 자동 폴링을 원하지 않으며, 정보가 공개되었을 때, 스스로에게 통지를 보내고 웹 사이트를 확인한다.

그래서 사람들이 초당 페이지 뷰 수가 많으면 차단됩니다. 게다가 당신은 로그인 할 수있는 쿠키가 필요하며 로그인 만하면 쿠키를 얻을 수 있습니다. 바라건대이 방법은 가능한 한 강력하게 만들 수있는 충분한 도구를 제공합니다.

모든 지식을 주셔서 감사합니다.

+0

어떤 종류의 "사기"를 예방 하시겠습니까? – Joseph

+1

페이지에서 사용자 정의 JS 코드 (greasemonkey, 브라우저 확장, 심지어 주소 표시 줄의 javascript :)를 실행할 수있는 다른 방법이 있습니다. 나는 콘솔을 막는 데 시간을 낭비하지 않을 것이다. 특정 브라우저에서는 arguments.callee.caller를 읽고 콘솔과 비슷한 발신자가 있는지 확인할 수는 있지만 브라우저에서 사용하지 않는 것이고 신뢰할 수는 없습니다. – DCoder

+0

콘솔을 차단할 수 있다고해도 해커는 Fiddler와 같은 중간 프록시를 사용하여 해당 호출을 가로 채서 생성하십시오. – selbie

답변

6

대다수의 브라우저에서 웹 콘솔을 사용하지 못하게하는 것은 매우 어려울 것이며이를 관리하는 사람은 브라우저 버그를 악용하는 것일 수 있습니다. 그러나 읽으십시오 ...

웹 프로그래밍의 첫 번째 규칙 : 절대은 웹 클라이언트로부터받은 모든 것을 신뢰합니다. 데이터로 전송되는 내용은 의도적으로 또는 의도하지 않게 위조되거나 변경되었을 수 있으며 웹 콘솔을 차단하더라도 사용자가 콘솔이있는 웹 사이트를 허용하지 않는 다른 브라우저에서 열지 못하게하려면 어떻게해야합니까? 그게 다야. @DCoder가 주석에서 언급했듯이 사용자 정의 JavaScript를 실행할 수있는 브라우저 확장을 비롯한 다른 방법도 있습니다.

그래서 모든 확인은 서버 측이어야합니다. 이미 검사를하고 있다는 것을 알고 있으며 더 자세한 내용을 알지 못하면 조언을하기가 어렵습니다. 즉, 지금까지 볼 수있는 한이를 수행하는 한 가지 방법은 각 클라이언트에게 ID를 발급하여 어딘가에 데이터베이스에 저장하는 것입니다. 순차적 인 ID 일 수는 없으며 누군가 다른 ID를 가지고 있더라도 (예 : 사용자 이름을 암호화 한 다음 해시 할 수 있음) 사소한 위조가 아닌지 확인하십시오. 서버에 대한 요청이있을 때마다, 마지막 요청이 500ms보다 전일 경우에만 응답을 발행하고 그에 따라 데이터베이스를 업데이트하십시오. 로그 오프 후 ID를 만료 시키십시오.

+0

예, 만료되고 트랜잭션과 연결된 세션 변수를 사용한다고 생각했지만 신중하게 검토해야합니다. 콘솔에서 유효한 세션을 만들 수도 있습니다. 요청 간의 간격은 나에게 몇 가지 통찰력을 줄 수 있습니다. 그러나 속임수를 쓰고 싶다면 웹 사이트를 속일 무작위 간격을 설정할 것입니다. – Mattijs

1

가장 먼저 고려해야 할 사항은 클라이언트가 아닌 서버를 보호하는 것입니다. 클라이언트 코드를 클라이언트에서 숨길 수는 없습니다. 그것이 속임수에 속이기를 원하는 소수의 사람들을 막는 데는 논란의 여지는 있지만 귀하의 주된 목표는 아닙니다. 서버 측에서이 작업을 수행해야합니다. 이는 서버에 대한 요청의 유효성을 확인하여 어느 정도 기대에 부합 함을 의미합니다. 그들은 가능성에 대한 몇 가지 규칙을 만들고 사용자

  • 를 식별 할 수 있도록

    게임 회사는

    1. 은 어떤 종류의 사용자 인증이 필요합니다. 예를 들어, 물리학 법칙을 적용해야합니다. 누군가가 부정 행위를 범했을 때 알 수 있습니다. 인간 활동으로 검증 할 수있는 것. 당신이 지속적으로 네트워크를 통해 데이터를 전송하지 않는 경우,

    속임수

  • 금지 사람들은 당신은 당신이의 과정을 통해 안전하고 지속적으로 서버에서 확인을 기꺼이하지 않는 한 해결 할수있는 문제가 경기. 이것은 서버로드를 증가시킬 것이지만 그것은 치트를 예방하는 불행한 비용입니다.

  • +0

    네, 그건 내 걱정입니다. 요청을 확인하기 위해 서버가로드됩니다.많은 웹 사이트에 많은 사용자가 참여하면 트래픽이 상당히 커질 수 있습니다. 게임과 관련된 모든 웹 사이트의 모든 페이지 새로 고침은 페이지 뷰를 생성하고 웹 서버에 전화합니다. 그 이후에 나는 항상 부정 행위를 탐지하려고 노력할 수 있지만, 그들은 이미 현재 선수들에 대한 게임을 부분적으로 망쳐 놓았을 것입니다. 나는 자바 스크립트 로직을 생성하는 하나의 페이지로 서버 엔트리를 단순화했다. 이렇게하면 서버에 더 많은 로직이 숨겨져 있다고 생각합니다. – Mattijs

    관련 문제