eval 예제

eval()은 JS 인터프리터를 호출해야 하기 때문에 대안보다 느리지만 다른 많은 구문은 최신 JS 엔진에 의해 최적화되어 있습니다. POSIX에서는 “2.14의 일부로 나열됩니다. 항목 “에발”에서 특수 내장 유틸리티”. 내장 의 의미는: 이론적 인 컴퓨터 과학에서, 신중한 구별은 일반적으로 eval과 적용 사이에 이루어집니다. Eval은 quoted string을 호출 가능한 함수와 그 인수로 변환하는 단계로 이해되지만, apply는 주어진 인수 집합을 가진 함수의 실제 호출입니다. LISP 및 Scheme과 같은 람다 미적분학을 기반으로 하는 기능언어 및 언어에서 특히 두드러지다. 따라서 예를 들어 Scheme에서 JavaScript의 eval을 사용하는 것은 Ajax 프레임워크의 일부로 JSON 텍스트를 구문 분석하는 것입니다. 그러나 최신 브라우저는 이 작업에 대한 보다 안전한 대안으로 JSON.parse를 제공합니다. eval을 사용하면 자바 스크립트 코드의 문자열을 실행 (또는 평가)할 수 있습니다. eval 명령은 원래 “sh”(본 쉘)를 포함하여 모든 유닉스 포탄에 존재합니다. 모든 인수를 공백과 연결한 다음 다시 구문 분석하여 결과를 명령으로 실행합니다.

sh(1) – FreeBSD 일반 명령 매뉴얼 또한 추가 안전 (그리고 빠른!) eval에 대 한 대안 () 또는 Function() 일반적인 사용 사례에 대 한. 다음 예제에서는 eval()을 사용하여 문자열 str을 평가합니다. 이 문자열은 경고 대화 상자를 열고 x가 5인 경우 z값을 42로 할당하고 그렇지 않으면 0을 z에 할당하는 JavaScript 문으로 구성됩니다. 두 번째 문이 실행되면 eval()은 이러한 문이 수행되고 명령문 집합을 평가하고 z에 할당된 값을 반환합니다. 파이썬에서 가장 간단한 형태의 eval 함수는 단일 식을 평가합니다. 마지막으로, eval은 매우 위험한 명령이 될 수 있습니다. eval 명령에 대한 모든 입력은 보안 문제를 피하기 위해 신중하게 확인해야 합니다. 그것은 남자 배쉬 내부에 포함되어 있습니다.

모든 기본 제공. “쉘 내장 명령”에 대 한 검색 및 “eval”에 대 한 검색. eval을 사용하는 가장 좋은 사용 사례 중 하나는 사용자가 런타임에 자바 스크립트를 실행할 수있는 자바 스크립트 로거입니다. 예를 들어 자바 스크립트 로거 사용자가 로거 창에서 스크립트를 실행할 수 있습니다. 공격자는 프로그램에 “session.update(`인증된`=True)” 문자열을 데이터로 제공할 수 있으며, 이 데이터는 세션 사전을 업데이트하여 인증된 키를 True로 설정할 수 있습니다. 이 문제를 해결하려면 eval과 함께 사용되는 모든 데이터를 이스케이프해야 하거나 잠재적으로 유해한 기능에 액세스하지 않고 실행해야 합니다. 앞에서 말했듯이 eval()을 사용하는 동안 관련된 잠재적 위험이 있습니다.이 문자열을 식으로 평가하려면 ${}를 사용하여 ECMA-6에 도입된 식을 평가할 수 있지만 실제로는 eval()를 사용하지 않고 모든 것을 달성할 수 있습니다. 기본적으로 eval())을 사용하면 편집기에서 코드를 편집하고 실행 중인 응용 프로그램을 다시 시작하지 않고 손실 상태(구현에 따라 다름)하지 않고 패치하도록 할 수 있습니다. 파일 변경 내용을 감시하는 관련 코드가 필요하고 어떻게 든 응용 프로그램에 변경 내용을 전송하지만 eval()은 궁극적으로 이러한 변경 내용을 실제 js로 변환하는 방법입니다. eval()을 사용하여 웹팩의 컴파일 프로세스를 우회할 수 있습니다. 언어 자체 내에서 호출할 수 있습니다.

예를 들어, 위의 경우 $1 악마 명령; var, 에발은 악한 명령을 평가하는 끝날 것이다; var=$varvalue 셸 코드를 실행한 다음 해당 악의적인 명령을 실행합니다. 두 형식 에서 반환 된 값은 mini-program 내에서 평가 된 마지막 식의 값입니다. 서브루틴과 마찬가지로 반환 문을 사용할 수도 있습니다.