eval()을 new Function()으로 대체가 되는 이유

정태민·2023년 1월 29일
0

회사업무

목록 보기
7/17

string값을 받아서 새로운 클래스 함수를 선언할때 eval()을 사용했다.
예를들면 이런식으로.. eval('new '+classname+'()');

이부분이 보안상 문제가 된다고해서eval대신에 함수전역 scope에서만 동작하는 new Function()으로 전부 교체...

function tempEval(str){

			let returnclass= (new Function('return new '+str)); 
			return returnclass();
		}
        

이런식으로 선언하면 함수는 자신이 선언된 순간을 기억하여 렉시컬스코프에 저장하는데 new Function을 이용해 함수를 만들면 지역 렉시컬이 아닌 전역 렉시컬 환경을 참조하게됨.
그래서 전역변수에서만 접근이 가능하게됨
eval과 다른점은 바로 이부분인듯. eval은 외부, 내부에서 다 접근이 가능한데 new Function은 전역에서 사용하는 함수만 접근 가능하다.
근데 csp뜨는건 똑같은데... 이게맞나싶음

    
profile
퇴근후 30분 출근전 30분

0개의 댓글