2013-05-20 3 views
-3

글쎄, 나는 게임 전투 무기에 대한 반칙을 정하고있다. 내가하고 싶은 것은 사람들이 단순히 안티 - 치트를 사용하는 것처럼 보이게하는 프로그램을 만들 수 없도록 데이터베이스로 프로그램을 '핑 (ping)'하는 것입니다.위조 된 연결을 중지 하시겠습니까?

쉽게 연결을 시뮬레이트하는 다른 사람을 '암호화'하거나 중지 할 수있는 방법이 있습니까? 내가 PHP와 큰 아니다이가 지금까지에 추가하는 방법입니다

public function Update() 
    { 
     $ign = $_GET['ign']; 
     $timestamp = $_GET['uid']; 
     $time = time(); 

     if(($time - 10 < $timestamp) && ($time + 10 > $timestamp)) 
     { 
      $this->connection(); 
      $data = mysql_query("SELECT * FROM users WHERE ign = '{$ign}'"); 
      if(mysql_num_rows($data) > 0) 
      { 
       mysql_query("UPDATE users SET lastonline = '{$time}' WHERE ign = '{$ign}'"); 
      } 
      else 
      { 
       mysql_query("INSERT INTO users (id, ign, lastonline) VALUES (NULL, '{$ign}', '{$time}') "); 
      } 

      echo "Connected to database"; 
     } 
     else 
     { 
      echo "Problem connecting"; 
     } 
    } 

나는 그것을 보호하는 방법의 일종 필요/열심히 신속하게 해독 할 수 있습니다. 한 번 금이 갔으면 쉽게 바꿀 수 있습니다. 충분한 정보를 제공했으면 좋겠어요!

+3

사기로부터 게임을 보호하는 것은 매우 복잡한 작업입니다.여기 또는 저기에 몇 개의 선을 삽입하는 것만 큼 쉽지는 않습니다. –

+1

예 : [사람들이 PHP 기반의 최고급 플래시 게임 테이블을 해킹하는 것을 막을 수있는 가장 좋은 방법은 무엇입니까?] (http://stackoverflow.com/questions/73947/what-is-the-best-way-to-stop-people- hacking-the-php-based-high-score-table-of-af) –

+2

내 IGN이'x OR 1 == 1'이고 게임의 모든 사람들이 * 금지 된 경우 어떻게합니까? – Amelia

답변

1

첫째, SQL 입력을 위생적으로 처리해야한다는 것은 매우 중요합니다. PDO로 준비 (ext/mysqlgoing on a journey far, far away)하는 것이 좋습니다.

$db = new PDO(<connection details>); 
$prepare = $db->prepare("SELECT * FROM users WHERE ign = :ign"); 
// Tip: make sure you actually check the prepare worked before trying to execute. 
$prepare->execute(array(":ign" => $ign)); 

등등. reference manual을 읽으십시오.

그러나 mysql_ *을 사용하고 변경을 거부하는 경우 (해제하더라도 PHP를 5.5로 업데이트하면 E_DEPRECATED이 던져 질 것입니다) mysql_real_escape_string을 사용하고 쿼리에 따옴표를 사용하지 마십시오.


다음으로 실제로 요청을 처리합니다.

여러 가지 방법이 있지만 가장 안전하며 유일한 옵션은 One Time Pad 또는 OAuth와 같이 암호 학적으로 강합니다.

자격 증명을 생성하고 제품 코드에서 고유하게 생성 된 해시로 서명 된 토큰을 게임에 보내도록합니다. 이것은 모든 설치에 대해 고유해야하며 스크립트에 의해 유효성을 검사 할 수있는 해시를 생성해야합니다.

이것은 게임 회사가 끊임없이 연구하고있는 문제이지만, 종종 무시되는 문제입니다. 게임은 시간을 할애 할만한 가치가 있다고 생각하는 모든 사람이 리버스 엔지니어링 할 수 있고 그렇게 할 수 있습니다. Anti-Cheat도 마찬가지입니다.


는 그럼에도 불구하고, 요청에 서명과 같습니다

  • 플레이어의 게임 내 이름을 어떤 방법으로 검증 할 수
  • 매우 정확한 타임 스탬프. 다른 사람 (당신은 가능성이 사양이있을 것이다 안티 치트에 필요한
  • 건 (등, speedhackers을 금지하는 데 유용하지만, 누군가가 텔레포트 경우 잘못된 반응에 대한주의) (암호 학적 보안)
  • 위치 데이터
  • 요청 서명

또한)이 들어 게임의 사랑 들어, PUNKBUSTER 스타일의 안티 치트를하지 않는다 (일명 는 봇넷 스타일 패션의 요청에 금지하지 않는, 그것은을 악용 할 수 있습니다 source )

마지막으로 모든 것을 검토하기 위해 전문 보안 연구원을 초대하는 것이 좋습니다.

관련 문제