최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday

티스토리 뷰

문자열로 받은 파라메터를 가지고 함수를 호출하는 경우 (아마) 가끔 쓸일이 있는 eval()

호출자와 동일한 권한으로 코드를 실행할 수 있기 때문에 위험하다.

예를들어 FileAPI를 사용하는 경우 엑세스하여 악의적인 작업을 수행할 수 있기 때문이다.

 

eval과 new Function 모두 문자열을 js 코드로 분석한다는 공통점이 있지만 다음의 차이가 있다.

 

eval 은 현재 실행 컨텍스트에서 구동되면 실행지점의 지역변수에 엑세스 할 수 있다.

그러나 Function은  지역변수에 엑세스 할수 없기 때문에 더 안전하다.

 

RunCode.ts

class RunCode{

  public static exec(obj:any){
    return Function(`
      "use strict";
      return ( ${obj} )  
    `)();
  }
}
export default RunCode;

 

사용

import RunCode from './RunCode';

// 현재시간을 구하는 함수에서 9시간을 더함
const COOKIE_MAXAGE = "new Date( Date.now() + (60 * 60 * 1000 * 9 * 1))";

// new Function 을 이용하여 COOKIE_MAXAGE를 실행한 결과값을 저장할 수 있다
// RunCode.exec("실행할 문자열")...
const maxAgeTimeStamp:number = Number(RunCode.exec(COOKIE_MAXAGE));

console.log( maxAgeTimeStamp ); // 1660900386228 => 현재 시간에서 +9시간된 Unix Timestamp
// 날짜로 변환해 보면 [2022. 8. 19. 오후 6:13:06] 가 출력된다

 

unix timestamp 변환은

https://www.freeformatter.com/epoch-timestamp-to-date-converter.html

'■ 프론트엔드 ■ > JavaScript' 카테고리의 다른 글

마우스에 반응하는 css3 perspective  (1) 2023.12.08
await-to-js  (0) 2022.12.05
typescript - .tsconfig.json  (0) 2022.01.12
단어강조  (0) 2021.05.03
ES6 구조 분해 할당 - Expressions Destructuring assignment  (0) 2020.11.06
댓글