KimMinJun
Coding Note
KimMinJun
전체 방문자
오늘
어제
  • 분류 전체보기 (487)
    • ALGORITHM (11)
      • 정렬 (6)
      • 최단경로 (1)
      • 자료구조 (1)
      • 슬라이딩 윈도우 (1)
      • etc (2)
    • Git (5)
    • Web (24)
      • Vanilla JS (13)
      • TS (2)
      • React (7)
      • ETC (1)
    • React 공식문서 (번역, 공부) (11)
      • Quick Start (2)
      • Installation (0)
      • Describing the UI (9)
      • Adding Interactivity (0)
      • Managing State (0)
      • Escape Hatches (0)
    • Next.js 공식문서 (번역, 공부) (3)
      • Getting Started (2)
      • Building Your Application (1)
    • PS (432)
      • 백준 (187)
      • Programmers (105)
      • CodeUp (21)
      • STL (3)
      • 제코베 JS 100제 (50)
      • SWEA (0)
      • LeetCode (65)
    • IT (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 관리

공지사항

인기 글

태그

  • 그래프
  • tree
  • Level 2
  • LeetCode
  • recursion
  • Level 1
  • js
  • C
  • 문자열
  • 백준
  • 제코베 JS 100제
  • codeup
  • C++
  • string
  • Level1
  • 정렬
  • 다이나믹 프로그래밍
  • Level 0
  • 수학
  • programmers

최근 댓글

최근 글

hELLO · Designed By 정상우.
KimMinJun

Coding Note

PS/Programmers

Programmers / Level 0 / OX퀴즈 / JS

2022. 10. 26. 23:12

https://school.programmers.co.kr/learn/courses/30/lessons/120907

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

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
    'PS/Programmers' 카테고리의 다른 글
    • Programmers / Level 1 / 옹알이 (2) / JS
    • Programmers / Level 0 / 저주의 숫자 3 / JS
    • Programmers / Level 0 / 다항식 더하기 / JS
    • Programmers / Level 0 / 분수의 덧셈 / JS
    KimMinJun
    KimMinJun

    티스토리툴바