티스토리 뷰
문자열로 받은 파라메터를 가지고 함수를 호출하는 경우 (아마) 가끔 쓸일이 있는 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 |
댓글