0

매니페스트 파일 또는 다른 곳에 속성을 지정하고 내 응용 프로그램 창에서 자바 스크립트 콘솔을 사용하지 못하게 할 수 있는지 궁금합니다. 자바 스크립트 콘솔을 사용하지 않으면 사용자가 돈을 버는 것이 아니라 게임을 제대로 실행해야합니다. 누구든지 애플 리케이션에서 자바 스크립트 콘솔을 해제하는 것이 가능한지 아는 사람 있습니까? Chrome의 향후 버전에서이 기능이 제공 될 예정입니까?크롬 웹 스토어 앱에서 inspect 요소/javascript 콘솔을 사용 중지 하시겠습니까?

+0

코드를 캡슐화하지 않고 (가능한 한 많이) 사용자가 혼란스러워하는 것을 어렵게 만듭니다. – megawac

+0

"컨텍스트 메뉴"제어 방법은 어떻습니까? –

답변

6

콘솔 앱에 대한 액세스는 이미 포장 된 앱 대 열려있는 웹 또는 진행중인 패키지가 풀린 앱에 비해 줄어 듭니다. 마우스 컨텍스트 메뉴는 개발자 도구를 제공하지 않으며 크롬 메뉴는 앱에 존재하지 않습니다. 유일한 옵션은 chrome : extensions 페이지 또는 Chrome Apps 개발자 도구에서 가져온 것입니다.

동기를 부여받은 사용자에게는 클라이언트 소스 수정을 포함하여 여러 가지 다른 경로가 있습니다. 자바 스크립트 obfuscator로 처리하면 약간 더 어려워 질 것입니다.

부정 행위를 방지하기 위해 게임 논리를 보호해야하는 경우 플레이어 동작을 확인하는 서버에서 게임 논리를 보호해야합니다. 가능하면 게임 동작을 캐싱하고 확인을 위해 전송하여 오프라인에서도 작동 할 수 있습니다. 그러나, 어느 시점에서 이것이 중요합니까? 싱글 플레이어 게임이라면별로. 리더 보드가있는 경우 사기범이 친구를 속일 수 있도록 사회 리더 보드로 만듭니다. 완전 멀티 플레이어 인 경우 이미 유효성을 검사해야합니다. ;) 절대로 클라이언트를 신뢰하지 마십시오.

1

클로저를 사용해야하고 수정해서는 안되는 코드 부분을 보호 할 수 있습니다.

예를 들어, 돈을 얻기 위해 간단한 수학 문제에 대답하는 게임이 있었고 돈이 충분하면 1000 달러라고 말하면서 총을 구입할 수 있습니다. 돈을 계정에 추가 할 수는 없지만 돈을 얻기 위해 질문에 답할 수 있어야합니다. 당신과 같이, 단지 getMoney 기능을 노출하고, 그 외 모든 것을 숨기 : 그들은 콘솔에서 노출 함수 내에서 액세스 할 수 있습니다

var game = function() { 
    var money = 0; 
    var hasGun = false; 

    var getMoney = function() { 
     response = prompt("What is 2+2?"); 
     if (response == 4) money += 100; 
     alert("You have $" + money); 
    } 
    var showMoney = function() { 
     console.log(money); 
    } 
    var buyGun = function() { 
     if (money >= 1000) { 
      hasGun = true; 
      money -= 1000; 
      alert("You bought a gun!") 
     } 
     else alert("Not enough money!") 

    } 
    //we'll use this to expose methods and variables. 
    var public = 
    { 
     getMoney: getMoney, 
     buyGun: buyGun, 
     showMoney: showMoney 
    } 
    return public; 
}() 
game.getMoney(); 

유일한 것은 물어 방법 및 showMoney 방법입니다. 더 많은 돈을 벌 수있는 유일한 방법은 ask 메소드를 통해이를 수행하는 것입니다. 콘솔에서 다음과 같이 썼다해도 :

game.money = 1000; 
game.showMoney(); //returns 0; 
game.hackForMoney = function() { money = 1000; } 
game.hackForMoney(); 
game.showMoney(); //returns 0; 
game.showMoney = function() { return 1000; } 
game.buyGun(); //alerts "Not enough money!" 

이제 누군가가 콘솔에 액세스 할 수 있으며 아무런 문제가되지 않습니다.

+0

이것은 절반의 답변입니다. 또한 게임의 모든 속성 (및 게임 자체, 실제로는'window.game')을 읽기 전용 속성으로 재정의하는 것을 제한해야합니다. 여기를 참고하십시오 : http://stackoverflow.com/questions/366047/can-read-only-properties-be-implemented-in-pure-javascript/366086#366086 –

관련 문제