브라우저에서 javascript를 실행하면 소스 코드를 다운로드하여 볼 수 있기 때문에 기능 코드를 시도하거나 숨길 필요가 없습니다.Node.js가 기능 검사 (toString)를 방지합니다
서버에서 실행하면 상황이 변경됩니다. 실행중인 코드를 볼 수 없게 호출 할 함수를 사용자에게 제공하려는 api와 같은 사용 사례가 있습니다.
특정 경우에 사용자가 제출 한 javascript를 노드 내부에서 실행하려고합니다. 우리는 sandbox node.js api에 접근 할 수 있지만 사용자가이 코드를 볼 수있는 toString 함수를 사용하지 않고도이 샌드 박스에 우리 자신의 API를 추가하고 싶습니다.
패턴 코드가 있거나 사용자가 기능 코드를 출력하지 못하도록하는 방법을 알고 있습니까?
업데이트 : 여기
아래 허용 대답에 따라 전체 솔루션 (내가 생각)입니다. 이것이 클라이언트 측 코드를 사용하여 시연 되더라도 유의하십시오. 이 아닌은 다운로드 한 코드를 읽음으로써 숨겨진 기능의 내용을 볼 수 있기 때문에이 클라이언트 측을 사용합니다 (축소판을 사용한 경우 코드를 검사 할 때 약간의 속도 저하가 있음).
사용자가 샌드 박스 환경 내에서 API 코드를 실행하도록 허용하지만 API가 수행하는 내용을 볼 수 없도록하려는 서버 측 용도로 사용됩니다. 이 코드의 샌드 박스는 요점을 설명하기위한 것입니다. 실제 샌드 박스 구현은 아닙니다. 당신이 함수에 콜백을 포장하는 경우
// function which hides another function by returning an anonymous
// function which calls the hidden function (ie. places the hidden
// function in a closure to enable access when the wraped function is passed to the sandbox)
function wrapFunc(funcToHide) {
var shownFunc = function() {
funcToHide();
};
return shownFunc;
}
// function whose contents you want to hide
function secretFunc() {
alert('hello');
}
// api object (will be passed to the sandbox to enable access to
// the hidden function)
var apiFunc = wrapFunc(secretFunc);
var api = {};
api.apiFunc = apiFunc;
// sandbox (not an actual sandbox implementation - just for demo)
(function(api) {
console.log(api);
alert(api.apiFunc.toString());
api.apiFunc();
})(api);
호기심에서 벗어나서 toString을 (를) 덮어 쓰지 않는 이유는 무엇입니까? 'foo.toString =() => {}' – Kousha
@Kousha : 수신 한 객체의 toString 메소드를 다시 설정할 수 있기 때문에'secret.toString = secret.constructor.prototype.toString'을 호출하십시오. –