주 메뉴 열기

eval 함수는 일부 프로그래밍 언어에서 제공하는 함수의 일종이다. 문자열을 입력 받아 그 문자열을 expression으로 처리한 후 결과값을 반환하는 함수이다.

보안 위험편집

신뢰할 수 없는 장소로부터 온 데이터에 eval을 사용할 때는 특별히 주의해야 한다. 이를테면, get_data() 함수는 인터넷으로부터 데이터를 가져온다고 할 때, 이 파이썬 코드는 안전하지 않다:

session['authenticated'] = False
data = get_data()
foo = eval(data)

공격자가 프로그램에 "session.update(authenticated=True)" 문자열을 데이터로 공급하면 session 디렉터리를 업데이트하여 인증 키를 True로 설정한다. 이를 해결하려면 eval을 사용하는 모든 데이터를 회피하거나 잠재적으로 유해한 기능에 대한 접근이 없는 상태에서 실행하여야 한다.

프로그래밍에서의 이용편집

PHP편집

$name = 'John Doe';
$greeting = 'Hello';
$template = '"$greeting,  $name! How can I help you today?"';
print eval("return $template;");

자바스크립트편집

foo = 2;
alert(eval('foo + 2'));

편집

$foo = 2;
print eval('$foo + 2'), "\n";

루비편집

a = 1
eval('a + 1') #  (evaluates to 2)

# evaluating within a context
def get_binding(a)
  binding
end
eval('a+1',get_binding(3)) # (evaluates to 4, because 'a' in the context of get_binding is 3)

외부 링크편집