JavaScript / HTML5 웹 게임이 복사되거나 변경되는 것을 어떻게 방지합니까?


45

JavaScript와 HTML5를 사용하여 제작 된 게임을 계획 중입니다.

누군가가 웹 서버에서 JavaScript를 단순히 복사하여 자신의 게임을 만들거나 (내 최대 관심사가 아닌) 자신의 JavaScript 기능을 대체하고 신뢰할 수있는 클라이언트에 대한 희망을 없애는 방법을 이해하는 데 어려움을 겪고 있습니다. 게임이 결국 멀티 플레이어를 지원할 수 있다면

다른 사람이 JavaScript를 읽지 못하게 할 수있는 방법이 있습니까?

그렇지 않다면, 모든 게임 처리가 사용자 입력과 그래픽을 캡처하는 클라이언트의 유일한 책임이있는 서버에서 수행되어야합니까?


22
마지막 단락은 옳은 내용, 비즈니스 앱의 경우, 게임의 경우에 대해 항상 클라이언트를 적대적인 것으로 취급합니다.
Nate

4
읽을 수 있으면 브라우저에 이미 사본이있는 것입니다. 그런 다음 다른 곳에 저장할 수도 있습니다. 읽을 수있는 모든 내용도 복사 할 수 있습니다.
BerggreenDK

답변:


44

모든 게임 데이터와 로직을 서버에 보관하십시오. 클라이언트쪽에있는 게임의 일부는 어쨌든 적절한 도구를 사용하여 복사 할 수 있습니다 (Flash 또는 Java 인 경우에도). 그냥 받아들이고 너무 신경 쓰지 마십시오.

가독성이 좋지 않기 때문에 자바 스크립트를 복사 할 수 없도록 유지하려면 축소 할 수 있습니다 . 어쨌든 게임 사이트 다운로드 속도가 빨라지므로 좋은 방법입니다.


4
코딩 방법에 따라 서버의 모든 내용이 손상 될 수 있습니다. 코드를 축소하고 난독 처리하는 것은 시간이 걸리고 싶지 않은 코드 만 저지하고 코드를 논리적으로 매핑합니다. 결론은 코드의 지적 재산권에 대해 걱정하는 경우입니다. 웹에 넣지 마십시오.
John

1
그렇다고해서 게으른 사람들을 억누르지 말아야한다는 의미는 아닙니다. 서버에서 게임 로직을 처리하고 ajax를 통해 json 객체를 반환 할 수도 있지만 반환은 여전히 ​​firebug로 볼 수 있습니다. 프로덕션 버전을 난독 처리하지만 주석 버전을 많이 유지하십시오 (이로 인해 유지 관리가 어려워집니다). 사람들을 저지하기 위해 할 수 있지만 100 % 안전하지는 않습니다.
John

3
과연. 축소 된 코드를 확장하는 데 많은 노력이 들지 않습니다. jsbeautifier.org
James

@John은 때때로 한 명의 사기꾼이 나타 났을 때 일부 게임이 망가지기 때문에 게으른 사람들을 억제하는 것은 무의미하다는 점에 유의하십시오.
o0 '.

11

다른 사람이 단순히 웹 서버에서 JavaScript를 복사하지 않고 자신의 게임을 만드는 것을 막을 수있는 방법

법률이 도움이되는 곳입니다. 실제로 이것은 자주 발생하지 않는 것 같습니다.

게임이 결국 멀티 플레이어를 지원하는 경우 자체 자바 스크립트 기능을 대체하고 신뢰할 수있는 클라이언트에 대한 희망을 무너 뜨릴 수 있습니다.

정확하게 이런 종류의 이유로 신뢰할 수있는 클라이언트는 없습니다. 지금이 꿈을 포기하십시오. :)


법을 호스팅하는 사이트가 지적 재산권을 중요하게 생각하지 않는 국가에 있거나 어떠한 이유로 든 귀하의 국가에 적대적인 경우 법률은 크게 유용하지 않을 것입니다. 그렇지 않은 경우에도 (잠재적으로 국제적) 법적 조치를 취하기위한 비용은이 질문을하는 사람의 재정 자원을 훨씬 능가 할 것입니다.
Paul Legato

답변의 의도는 법적 조치를 권장하는 것이 아니라 소프트웨어를 잠그는 것은 대부분 무의미하다는 것입니다. 자바 스크립트 사용 여부에 관계없이 리버스 엔지니어링 될 수 있습니다.
Kylotan

8

다른 사람들이 추천 한 것처럼; 가능한 많은 서버 측 코드를 유지하십시오.

코드 복사를 처리하는 데 사용한 방법은 약간 이상하지만 지금까지는 잘 작동했습니다.

  • 서버 측에서 고유 ID를 생성하여 나중에 저장하십시오.
  • 서버 측, HTML 렌더링 중에 스크립트 요소에 고유 ID를 추가하십시오.
  • 클라이언트 측에서 WebSocket 연결을 작성하고 고유 ID를 서버에 전달하십시오.
  • 서버 측, 현재 목록과 ID를 일치시킵니다.
  • 일치하는 것이 없으면 연결을 닫습니다.
  • 일치하는 것이 있으면 메시지 처리기를 "적절한"것으로 바꾸고 ID를 삭제하십시오.
  • 비밀 코드를 클라이언트로 JSON, { "func": "function () {dostuff ();}"}
  • 클라이언트 측에서 "func"가 포함 된 메시지는 평가하십시오.

이제 비밀 코드가 클라이언트 측에서 실행 중이며 뷰 소스 또는 관리자 / 콘솔에 표시되지 않습니다. 코드를 얻는 방법은 여전히 ​​있지만 조금 더 어렵습니다.


위의 솔루션에서 무언가를 가져와야한다면; 나는 진정한 WebSocket을 연결하고 "가짜 클라이언트"를 만들거나 브라우저에서 Firebug 디버깅 도구를 사용하고 스크립트를 중지하여 값을 체크 아웃하려고합니다.
BerggreenDK

페이지로드시 생성되고 스크립트 연결시 던지기 때문에 현재 사용 가능한 고유 ID를 어떻게 든 예측할 수 없다면 가짜 클라이언트를 만들 수 없습니다. 또한 익명 함수를 평가하기 때문에 스크립트를 중지하고 값을 보는 것이 어렵습니다. 내가 말했듯이 여전히 코드를 얻는 방법이 있지만 더 어렵습니다. 대부분의 경우 코드는 "충분히 안전"해야합니다. 클라이언트 측 코드로는 그 이상의 것을 할 수 없습니다.
Stephen Belanger

서버에서 실제 클라이언트를로드하고 시작할 때마다 현재 비밀 값을 긁는 가짜 클라이언트를 작성하는 것은 매우 쉽습니다.
Paul Legato

나는 그것이 "불가능하지 않다"만큼 "쉬운"이라고 말하지 않을 것이다. 내가 말했듯이, 그 주위에는 방법이 있습니다. 완벽하게 안전한 시스템은 없습니다. 대부분 해킹에 너무 많은 노력을 기울일 수 있도록 인터페이스를 적절하게 가려두면됩니다. 이 경우, 약간의 코드를 스트리밍해야하므로 해커는 코드를 수신하고 유용한 구조로 배열 할 클라이언트를 만들어야합니다. 필요에 따라 코드를 스트리밍하므로 해커는 전체 코드 덤프에 즉시 액세스 할 수 없습니다.
Stephen Belanger

3

게임 코드가 안전하다는 것을 확신 할 수있는 유일한 방법은 클라이언트 / 서버 유형의 게임을 구축하고 서버에 가능한 많은 코드를 넣는 것입니다. 물론 서버를 안전하게 만드십시오!

주요 문제는 컴퓨터에서 코드가 실행되고 있으면 코드를 검사하고 디 컴파일하고 작동 방식을 알아낼 수 있다는 것입니다. 이것은 JavaScript, Flash, C ++ 등의 경우에 해당됩니다. 실제로 MMO 개발에서 (대부분의 전문적인 경험이있는 곳) 처음부터 가정은 고객이 훼손되었다는 것입니다. 고객을 위해 작성한 모든 내용은 이미 악의적이거나 아니.

코드를 축소하면 많은 도구 중 하나를 사용하여 코드를 축소하기에는 너무 게으른 사람들에 대해 소량의 보호 기능이 제공됩니다. 그러나 데이터 풋 프린트를 줄이려면 프로덕션 코드 축소 해야 합니다.

그러나 상사가 어떤 종류의 코드 보호를 원할 경우 "Javascript obfuscator"를 Google에 추가 할 수 있습니다. JS는 적어도 불 침투성으로 만드는 무료 및 유료 소프트웨어가 많이 있습니다 플래시처럼 디 컴파일합니다.


C ++이 Javascript와 같은 수준이 아니라는 것을 지적하고 싶습니다. C ++은 게임 로직을 이해하기 위해 누군가 읽어야하는 어셈블리로 컴파일합니다. C ++의 각 문은 어셈블리에서 여러 줄을 만들 수 있으므로 시간이 많이 걸리는 작업입니다. 자바 스크립트를 난독 화하는 것은 같은 언어이기 때문에 동일하지 않습니다. 누구나 그것을 "미화"하고 거의 사람이 읽을 수있는 문장을 읽을 수 있습니다.
TomTsagk

3

이 코드 난독 화에 대한 이야기 ​​외에도 각 파일의 맨 위에 매우 명확한 저작권 신고서를 작성하고 라이센스가 변경 또는 상업적 사용을 허용하지 않음을 분명히하십시오. 누군가가 그것을 복사하려고하면 이것은 법적 상환을 제공합니다. 법정에 기꺼이 가지 않으려면이 모든 질문은 대부분 학문적입니다.


이것은 가치있는 것에 대해서는 좋지만 그다지 중요하지 않습니다. 지적 재산권의 개념은 실제로 많은 국가에서 인정되지 않으며, 어떤 경우에도 법원 사건의 법적 비용은 특히이 사이트의 포스터가 이용할 수있는 것, 특히 공격자가 다른 국가에있는 경우를 훨씬 능가합니다.
Paul Legato

0

서버에 게임 로직을 유지하는 게임 멀티 플레이어를 만들면 적어도 훔치기에 덜 매력적이라고 ​​생각합니다. 당신은 클라이언트를 정말로 믿을 수 없습니다. 누군가 이미 언급했듯이 바이트 코드에서 코드 텍스트를 리버스 엔지니어링 할 수있는 Java 및 Flash와 같은 컴파일 된 언어 도구도 있습니다.


-1

Javascript 축소기를 사용해야합니다. 원하는 옵션을 자유롭게 찾을 수있는 옵션이 많이 있습니다. 여기에 약간의 연구를 저장하기 위해 Yahoo Minifier를 사용해보십시오 . 나는 그것을 스스로 실행하지 않았지만 그것이 당신이 필요로하는 것을 할 것이라고 생각합니다. 목표는 1) 파일 크기를 줄이고 2) 코드를 난독 화하는 것입니다. 이것은 모든 공백, 주석을 제거하고 변수 이름을 더 짧고 무의미한 이름으로 대체하여 수행됩니다.

오늘날 대부분의 웹 응용 프로그램에는 상당한 양의 Javascript가 있으며 이러한 도구를 사용하여 IP를 보호하려고합니다. 다른 사람들이 말했듯이 항상 "서버에서이 작업을 수행 할 수 있습니까?" 중요하거나 민감한 운영을 위해이 기능을 사용해야한다고 생각합니다.


7
모호성에 의한 보안은 보안 가능성을 모호하게합니다. :)
Rushyo

1
오 제발. 나는이 인용문을 항상 듣지만 그것은 사실이 아닙니다. JS를 가리는 것이 적어도 일부 사람들을 저지 할 것이라는 사실은 사실이다.

2
축소 기는 그를 도와주지 않습니다. 대부분의 "심각한"사람들은이 스크립트를 다시 "확장"하는 방법을 알고 있다고 생각합니다.
BerggreenDK

1
@Sergio : 당신이 알고 있기 때문에 당신은이다,이 인용문을 항상 듣고 사실 . 그것은 저지 할 것이다 "어떤"사람들은 사실, 그러나 "어떤"사람들을 억제하는 것은 무의미하다 : 당신이 금이 때 한 번 , 당신은 아래로 이동합니다.
o0 '.

-1

구글 클로저 컴파일러 사용 http://code.google.com/closure/compiler/ 단지 js 최소화 기가 아닙니다.)

Closure Compiler를 사용하면 어떤 이점이 있습니까?

  1. 능률. Closure Compiler는 JavaScript 파일의 크기를 줄이고 더 효율적으로 만들어 애플리케이션이 더 빠르게로드하고 대역폭 요구를 줄 이도록 도와줍니다.

  2. 코드 검사. Closure Compiler는 불법 JavaScript에 대한 경고 및 잠재적으로 위험한 작업에 대한 경고를 제공하여 버그가 적고 유지 관리가 쉬운 JavaScript를 생성 할 수 있습니다.


-1

또는 Game Maker HTML5와 같은 코드를 사용하여 코드를 난독 화하는 게임을 만들 수 있습니다. 즉, 사람이 코드를 읽을 수 없게됩니다. 그리고 편집하기가 거의 불가능합니다.


2
-1 난독 화는 지금까지만 진행됩니다. 이 질문에 대한 다른 난독 화 답변에서 언급했듯이 게임이 복사되거나 변경되는 것을 확실히 막지는 못합니다.
doppelgreener

-1

독점적 인 것은 서버 측에 보관해야합니다. 클라이언트 측은 게임 사용을 용이하게하기에 충분할만큼만 제공합니다.


-1

서버에 모든 것을 넣으면 성능 문제가 발생할 수 있으며 오늘날 우리가 알고있는 웹의 모든 잠재력을 실제로 사용하지는 않습니다.

C ++로 코드를 작성하고 바이너리로 컴파일 할 수 있습니다.

네이티브 클라이언트 (NaCl).

https://stackoverflow.com/questions/9018537/how-to-run-c-programs-on-the-web-inside-a-browser를 참조 하십시오


GDSE에 오신 것을 환영합니다. OP는 JavaScript에 대해 구체적으로 묻습니다. 그들은 어쩌면 그렇게하면서 C로 ++ 쓰기를 다시 및 염화나트륨을 사용 언급 한 바와 같이, 그 해결책은 정말 요구를 충족하지 않습니다. 또한 NaCl을 언급하고 링크를 덤프하는 것이 NaCl이 무엇인지 또는 왜 도움이 될 수 있는지에 대한 요약을 제공하는 것만 큼 좋지 않습니다.
Pikalek
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.