JS 코드 문자열이 있을때 이걸 서버 프로세스에 영향을 미치지 않게 실행하고 싶어짐

근데 엄청난 문제가 있었으니 바로 그 코드가 사용자로부터 받은 코드라 그냥 eval로 실행시키면 무료 호스팅 서비스가 되는거나 마찬가지니 심각하게 고민하고 구글링 해봤다


1. 왜 eval은 미친개시발폐기물새끼인가

아래 코드를 보자 (폰으로 적은거라 가독성 ㅈㅅ)

var a = "dont log this"

eval("a='nope'; console.log(a)")

실행결과는 아마 nope가 로그될것이다 이처럼 eval은 프로그래머가 짠 코드와 동일한 권한으로 실행한다. 이거 쓰는 코더는 교수형 집행해야한다고 생각한다.


2. new Function()

이놈은 eval하고 비슷하다. 근데 차이점은 eval과 다르게 바로 실행하지 않고 함수로 리턴해준다는 점과 속도가 월등히 빠르다는 점이 있다. 그리고 전역변수 접근은 가능하지만 변경할 수는 없어 비교적 안전하다. 근데 이것도 쓰지마라


3. vm2

이건 라이브러리인데 브라우저에서 코드 실행시키는것처럼 샌드박스로 격리해 실행시켜준다. 게다가 vm도 지원하니 더욱 안전하게 실행시킬 수 있다.

https://github.com/patriksimek/vm2


모두 안전한 프로그램을 만들도록 하자