문제

나는 플래시 게임을 위해 백엔드를 작업하고 있습니다. 안전한 스코어 보드로 들어가는 데이터.

이 게임은 배너 광고의 많은 사이트에서 호스팅 될 예정이며, 사용자는 광고에서 게임을 플레이 한 다음 기본 사이트로 클릭하여 세부 정보를 저장합니다.

지금 나는 이것의 선을 따라 생각하고있다

  1. 사용자는 게임을하고 클릭하여 점수를 제출합니다.
  2. 백그라운드에서 배너는 점수와 원산지 도메인을 기본 사이트의 스크립트로 보냅니다.
  3. 스크립트 확인 도메인은 광고가 호스팅되는 유효한 도메인 중 하나입니다.
  4. 모든 것이 옳은 경우, 스크립트는이 점수와 도메인의 해시를 생성하고 점수와 함께 데이터베이스에 저장합니다.
  5. 스크립트는 해시를 플래시로 반환하여 메인 스코어 보드를 열어주는 geturl의 쿼리 스트링에 자갈을두고 있습니다.
  6. 스코어 보드 페이지는 참조자가 유효한 도메인 중 하나인지 확인합니다.
  7. 그렇다면 유효한 토큰 인 경우 해시의 데이터베이스를 확인합니다.
  8. 그런 다음 사용자는 세부 사항을 채우고 레코드는 해시에 따라 업데이트됩니다.

지난번에 Flash를 확인하면 참조 정보를 보내지 않습니다. 그렇다면 이러한 종류의 플래시/데이터베이스 상호 작용에 대해 이미 확립 된 패턴이 있습니까?

4 단계에서 어떤 종류의 해싱/체크 스모핑을 사용해야합니까? 이런 종류의 작업의 올바른 이름은 무엇입니까? 해시, 체크섬 또는 다른 것입니까?

나는 Clientside 기술이기 때문에 Flash는 실제로 그렇게 안전하지 않을 것이라는 것을 이해하지만, 내 마음에 위의 것과 같은 것은 이런 종류의 응용 프로그램을 해킹 할 수있는 것만 큼 감동적입니다.

업데이트 : 내 주요 목표는 사람들이 스크립트의 URL을 찾기가 더 어렵게 만드는 것입니다.

고마워, 그렉

도움이 되었습니까?

해결책

나는 이전에 게임 업계에서 일 했으며이 라인을 따라 무언가를했습니다. 내가 아는 한, 아무도 부품을 제출하는 점수를 크래킹하는 것을 귀찮게하지 않았습니다.

그 방법은 다음과 같습니다.

  1. 소금으로 임의의 숫자를 생성하십시오 (플래시에서)
  2. 소금 (플래시에서)을 기준으로 수학 작업을 사용하여 점수를 인코딩하십시오.
  3. 점수를 추가하여 점수에 템퍼링이 없는지 확인하십시오 (플래시에서)
  4. 점수와 필요한 데이터를 점수 제출 페이지로 보내십시오.
  5. 서버에서 체크섬을 사용하여 점수가 강화되지 않았 음을 확인합니다.
  6. 점수가 유효하다면 데이터베이스에 삽입하십시오.
  7. 원한다면 체크섬을 위반하는 점수 제출자의 IP 주수를 기록 할 수 있습니다 (아마도 3 개의 나쁜 체크섬 정책이 나올 수도 있습니다). 스크립트를 추가하여 1 시간에 서버에 액세스하는 것을 금지하는 스크립트를 추가 할 수 있습니다. 누군가가 당신의 코드를 그 나쁜 코드를 깨고 싶지 않다면 필요합니다.

참고 : 해싱 / 체크 스모킹은 사용자 정의 기능을 사용하여 만들어졌습니다. 매우 안전한 것이 필요하지 않았습니다. 소금과 점수에 계산을 사용하여 만들어졌습니다. 합계, 곱셈 및 뺄셈과 같은 간단한 수학 작업.


편집하다: 체크섬에 대한 간단한 알고리즘 / 수학

사용자의 점수가 있다고 가정 해 봅시다 5885.
당신은 소금으로 임의의 숫자를 생성합니다 134789 (일정한 길이, 0 인 패드)

암호화 = 점수 * 소금 (여기서 좀 더 복잡한 것을 사용해야하지만 예시적인 일입니다)

이 예에서 암호화 된 점수는 다음과 같습니다. 793233265

이제 체크섬의 경우 값을 갖고 싶다고 가정 해 봅시다. 253 체크섬으로.
당신은 암호화 된 점수의 모든 숫자를 추가합니다. 7+9+3+2+3+3+2+6+5 = 40

이제이 점수에 대한 체크섬의 값을 계산합니다.
253 - (암호화 점수 숫자의 합계 % 253)

이제 다음 숫자가 있습니다.
소금 = 134789
암호화 된 점수 = 793233265
체크섬 = 40

서버에 요청하여 보내는 것입니다 134789793233265040 점수로.

점수 서버에서 나눌 수 있습니다 793233265 ~에 의해 134789 기부 5885 이전과 동일한 함수를 사용하여 체크섬을 확인하십시오.

체크섬이 실패하면 숫자가 변조되었습니다.

당신은 아마도 훨씬 더 안전한 것으로 끝날 수 있지만, 그것은 트릭을 수행해야합니다.

다른 팁

기본적으로 당신은 합법적 인 클라이언트에서 점수가오고 있는지 확인하고 싶지 않습니다. 클라이언트가 실제로 게임을 플레이하여 점수를 달성했는지 확인하려고합니다. 본질적으로 당신이 기대할 수있는 최선의 방법은 사람들이 게임을하기 위해 AI를 만들어야한다는 것입니다.

다음은 시도 할 수있는 몇 가지 사항입니다.

  • 입력을 게임에 로그인하고 점수와 함께 그것들을 보내십시오. 그런 다음 서버는 점수가 가능한 게임에 해당하는지 확인할 수 있습니다. 이 방법으로 중복 제출을 감지 할 수도 있습니다.
  • 고객이 명백히 비인간적 인 속도로 점수를 제출하는 것을 막기 위해 요금 제한을 적용하십시오. 실제로 달성 할 수있는 것과 초당 동작과 같은 것들에 대한 하한을 기준으로 허용 가능한 점수에 상한을 적용하십시오.
  • 이전 입력을 사용하여 의사 임의 번호 생성기를 부분적으로 시드하십시오 (사용한다고 가정). 이로 인해 고객이 제출물을 약간 변경하고 여전히 유효한 게임/점수 콤보를 얻을 수 있습니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top