https://school.programmers.co.kr/learn/courses/30/lessons/120907
function solution(quizList) {
let result = [];
for(let quiz of quizList) {
let [expression, answer] = quiz.split('=');
if(eval(expression) === Number(answer)) result.push('O');
else result.push('X');
}
return result;
}
eval()을 이용하여 문자로 들어온 수식을 간단하게 계산값을 얻을 수 있다.
하지만 eval()에는 보안 이슈가 있으므로 PS(Problem Solving) 할때 이외에는 쓰지 않는 것이 좋겠다.
정확히 말하면 eval() 함수는 계산값을 얻는 것이 아니라, 문자열을 받아서 자바스크립트로 실행을 시키는 함수이다.
따라서 1 + 5 같은 수식계산 뿐만 아니라 기타 js 코드도 문자열로 받으면 실행이 된다는 것이다.
이것을 악의적으로 이용가능한 보안 이슈가 있는데,
print(eval(__import__('os').system('ls/')))
위와 같이 실행하게 되면 root 디렉토리의 정보가 노출된다.
따라서 eval() 함수를 사용하는건 권장하진 않는다.
물론 지금같이 간단히 그냥 PS를 할 땐 상관없다.
하지만 만약 자신이 만든 웹페이지에서 input창에 값을 얻어서 eval을 시키는 로직이 있다면 사용하는것을 피해야 한다.
만약 굳이 사용해야 한다면 위와 같은 안티패턴을 피할 것을 권장한다.
(예를 들면 변수를 통해 값을 받은 후, object나 다른 구조로 추적이 어렵게 하는 것이다.)
'PS > Programmers' 카테고리의 다른 글
Programmers / Level 1 / 옹알이 (2) / JS (0) | 2022.11.25 |
---|---|
Programmers / Level 0 / 저주의 숫자 3 / JS (0) | 2022.10.26 |
Programmers / Level 0 / 다항식 더하기 / JS (0) | 2022.10.24 |
Programmers / Level 0 / 분수의 덧셈 / JS (0) | 2022.10.24 |