node.js-코드 보호?
다음 프로젝트에서 node.js를 사용하고 싶지만 상사는 경쟁자가 소스 코드를 읽을 수 있다는 점을 좋아하지 않습니다.
JavaScript 코드를 보호하는 방법이 있습니까?
노드에 대한 NativeExtension을 사용하여이를 수행 할 수 있습니다.
당신은이 것 boostrap.js
.jse 파일에 대한 확장 핸들러를 추가 파일을
// register extension
require.extensions[".jse"] = function (m) {
m.exports = MyNativeExtension.decrypt(fs.readFileSync(m.filename));
};
require("YourCode.jse");
YourCode.jse
소스 코드의 암호화 된 버전이 될 것입니다 (복호화 프로세스가 기본 확장에서 발생하기 때문에 복호화를위한 키는 일반 텍스트의 어디에도 없을 것입니다).
이제 NativeExtensions decrypt
함수가 소스를 다시 자바 스크립트로 변환합니다. 빌드 프로세스 .jse
에서 모든 파일의 암호화 된 버전을 생성 하고이를 고객에게 공개하도록하십시오. 또한 네이티브 확장이 필요하지만 이제는 너무 많은 노력없이 코드를 수정하기가 조금 더 어려워졌습니다. 기본 확장 프로그램을 호출하여 불법 복제를 방지하는 데 도움이되는 라이선스 정보를 확인할 수도 있습니다 (이로 인해 불법 복제가 중지되지는 않으며 해결책이 없습니다).
라이센스 계약을 포함하고 소스 코드를 제공하십시오. 어쨌든 사용자 정의를 원할 수 있습니다.
80 개 이상의 파일로 거대한 순수 Nodejs 프로젝트를 방금 완료했기 때문에 OP와 동일한 문제가 발생했습니다. 저는 최소한의 노력을 위해 최소한의 보호가 필요했지만 NPMjs OS 커뮤니티에서이 기본적인 요구 사항을 다루지 않은 것 같습니다. 부상에 소금을 추가하십시오 JXCore 패키지 암호화 시스템은 지난주 몇 시간 만에 크랙되어 난독 화로 돌아갑니다 ...
그래서 저는 파일 병합을 처리하는 완전한 솔루션을 만들었습니다. 병합에서 지정된 파일 / 폴더를 제외하는 옵션이 있습니다. 그런 다음 이러한 파일은 병합 된 파일의 새 출력 위치에 복사되고 해당 참조는 자동으로 다시 작성됩니다.
추신 : 사람들이 더 나아질 수 있도록 기여한다면 기쁠 것입니다. 이것은 도둑과 당신처럼 열심히 일하는 코더 사이의 전쟁입니다. 힘을 합쳐 리버스 엔지니어링의 고통을 증가 시키자!
명확하게 말하면, 클라이언트 측 자바 스크립트 (원격 서버에서 표준 웹 브라우저로 다운로드)는 원본 소스를 재구성 ( "난독 해제") 한 이후 어떻게 난독 화하더라도 보거나 수정하지 못하도록 보호 할 수 없습니다. 기술적으로 사소합니다. (Javascript 난독 화는 널리 사용되는 "모호함을 통한 보안"이라는 잘못된 보안 용어의 또 다른 예입니다.)
Javascript 및 Node.js를 사용하여 보호 된 "제품"(이 컨텍스트에서 회사가 제어하지 않는 서버에 설치해야하는 응용 프로그램 또는 서비스)을 제공하려는 경우에는 사용할 수있는 유일한 옵션으로도 보안을 설정할 수 없습니다. 귀하 (난독 화)는 그러한 보호를 제공하지 않습니다.
제품이 바이너리 실행 파일로 제공 되더라도 바이너리는 이해할 수있는 형식으로 디 컴파일 될 수 있으므로 포함 된 지적 재산을 보호 할 수 있다는 보장이 없습니다. 이 경우 낮은 수준의 기계어 코드 (디 컴파일로 제공됨)를 최신 프로그래밍 언어에서 사용하는 높은 수준의 논리 구조로 변환하는 데 필요한 과도한 리소스 (시간 / 전문 지식)를 기반으로 한 수준의 보안을 누릴 수 있습니다. (한때 CP / M을 내부 설계에 대한 이해로 디 컴파일 한 사람이 직접 작성했습니다.;)
그러나 모든 것이 손실되지는 않습니다. 프로그래밍 방식으로 지적 재산을 보호 할 수 있다고 가정하면 (배심원이 아직이 항목에 참여하고 있음) Node.js 기반 제품을 안전한 방식으로 제공 할 수있는 방법이 있습니다. Node.js 소스 코드의 상당한 리팩토링이 필요하므로 기술적으로 모험적이지 않습니다 (암호화 보안 라이브러리에 대한 지원을 추가하고 독점 라이브러리에 대한 객체 리플렉션을 제거하거나 보호하기 위해).
서버 측 자바 스크립트 코드는 완전히 닫힌 소스입니다. 아무도 읽을 수 없습니다.
클라이언트 측 자바 스크립트 코드는 완전히 오픈 소스입니다. 누구나 읽을 수 있습니다.
후자의 경우 아무것도 할 수 없지만 RoR, ASP.NET, PHP 등에 동일하게 적용됩니다.
실제 서버 코드는 공개적으로 제공하지 않는 한 닫힙니다.
라이브러리를 만들고 타사 소스로 판매하려는 경우 공개되어 도난 당할 수 있습니다. 물론 저작권 침해로 고소 할 수 있습니다.
도난 당할 수있는 라이브러리를 판매하는 extjs 와 같은 다양한 대기업 이 있으므로 실제로 판매하는 것이 코드와 지원 서비스입니다.
노드를 기반으로하는 대부분의 상용 프로젝트는 서비스입니다.
JXcore (node.js 0.11.X distro)에는 소스 코드와 자산을 보호하는 자체 JX 패키징 기능이 있습니다. 특정 패키지를 다른 응용 프로그램에서 사용할 수 있는지 여부를 선택할 수도 있습니다. (독립형 OR 라이브러리)
JS 등 파일이 많고 모듈의 진입 점이 다음과 같다고 가정 해 보겠습니다.
exports.doThis = function() { ...... };
아래 메소드를 호출하여 JX 패키지로 컴파일하면 소스 코드는 안전합니다.
jxcore.utils.hideMethod(exports.doThis);
이것은 (메소드 숨김) 호출 응용 프로그램에서 도달 할 수없는 다른 모든 하위 JS 파일이기 때문에 항목 파일에만 필요합니다.
JX 패키지를 실행하려면 JXcore가 필요합니다.
자세한 정보는 JXcore 에서 확인할 수 있습니다 .
핵심 로직을 모듈로 패키징합니다. 이러한 모듈을 빌드 한 다음 Google의 클로저를 통해 실행할 수 있습니다 . 빌드 프로세스의 일부로 Grunt 작업 으로 이를 수행 할 수도 있습니다 .
오래된 질문이지만 지적 할 가치가 있습니다. 참고 : 여러분이하는 일은 진정으로 여러분의 코드를 숨길 수는 없지만 .Net (C #)이나 Java를 통해 제공되는 것은 아닙니다. 일반적으로 uglify 나 클로저와 같은 도구를 사용하는 것만으로도 난독 화 지점으로 충분합니다. 모듈화되고 클로저를 사용하면 실제로 다른 방법으로는 어려울 수있는 많은 최적화를 수행 할 수 있습니다.
EncloseJS -node.js 프로젝트 용 컴파일러를 사용할 수 있습니다 . 실제로 JavaScript를 네이티브 코드로 컴파일하며 소스는 바이너리에 포함되지 않습니다.
스크립트를 난독 화하기 위해 nodejs 용 패커 를 사용할 수 있습니다 .
아무도 여러분의 코드를 읽을 수 없다는 것을 절대적으로 확신 할 수있는 방법은 없습니다. 하지만 난독 화 또는 축소를 사용하면 코드를 디코딩하기가 훨씬 더 어려워 질 수 있습니다. 난독 화자 / 최소화의 한 예는 자바 스크립트 용 Google의 클로저 컴파일러 입니다.
이것들은 좋은 선택 인 것 같습니다. Node.js 애플리케이션을 단일 실행 파일로 컴파일하는 명령 줄 유틸리티입니다.
나는 아이디어가. js 대신 cpp
또는 java
애플리케이션을 보호하십시오 .
- 코드를 암호화 형식으로 래핑하고
utf-8
파일 리소스 로 컴파일합니다 . - 귀하의 사용
cpp
또는java
A를 전체 파일을 업로드 할 응용 프로그램을linux pc
하거나arm computer
, 당신이 가까운 강력한 암호를하거나 만들ssh port
거나 비디오 포트를 비활성화 만 웹으로 리눅스 PC를 찾습니다. - Linux PC에는 파일을 해독하는 cpp 프로그램이 있습니다.
- 당신의 리눅스 PC를 제어 할 웹 서버를 개발하십시오.
따라서 이것은 블랙 박스와 매우 유사하며 클라이언트는 코드에 대해 아무것도 할 수 없습니다.
참조 URL : https://stackoverflow.com/questions/5951302/node-js-code-protection
'programing' 카테고리의 다른 글
WPF의 활성 창을 참조하십시오. (0) | 2021.01.18 |
---|---|
VBScript에서 문자열에 따옴표 추가 (0) | 2021.01.18 |
중앙에서 x 픽셀만큼 오프셋 된 HTML 배경 이미지 (0) | 2021.01.18 |
NetBeans에서 마우스 호버에 대한 Javadoc 문서를 보는 방법은 무엇입니까? (0) | 2021.01.18 |
얼굴 감지에서 Haar Cascades 대 LBP Cascades (0) | 2021.01.18 |