2010-07-21 7 views
1

내 코드에서 eval을 사용하고 있으며 최근에 심각한 보안 문제가 있음을 알게되었습니다. eval()이 Javascript에서 사용되는 경우. 가장 일반적인 시나리오는 eval()을 사용하여 변수 이름을 작성한 다음 여기에 해당 변수의 값을 가져 오는 것입니다.다음 코드에서 eval()을 제거하려면 어떻게해야합니까? - Javascript

var a = "2"  // could be any value 

work(a); 

function work(a) 
{ 
var l1 = "something"; 
var l2 = "something else"; 
var l3 = "something different"; 

alert(eval("l"+a)); 
// alerts "something else" 
}; 

이와 같은 상황에서 eval()에 대한 대안이 있습니까?

윈도우 [ "l"+ a]를 사용하여 시도했지만 변수가 전역이고 document.getElementById ("l"+ a)이고 둘 다 작동하지 않는 경우에만 작동합니다.

도움을 주시면 감사하겠습니다.

감사합니다. 노먼.

+1

'평가'는 사용자가 평가 된 것을 입력하게하는 경우에만 * 위험합니다. 그러나 그것은 또한 나쁜 습관이고, 99.9 %의 경우에서 피할 수 있습니다. 배열로 – Matchu

답변

6

아마도 개체 또는 배열 사용 사용할 수 있습니다

var obj = { 
    '1' : 'something', 
    '2' : 'something else', 
    'foo' : 'entirely different' 
}; 
// access like this: 
obj[1];   // "something" 
obj['foo'];  // "entirely different" 
var key = 'foo'; 
obj[key];   // "entirely different" 

또는 배열로서 :

var arr = [ 
    "something", 
    "something else", 
    "something different" 
]; 
arr[0] // something 
arr[1] // something else 
+1

definately. 매개 변수는 배열 색인 일뿐입니다. –

+0

@ 에릭, 네, 접미사가 OP에서 의미가 있었는지 확실하지 않지만 최선의 선택이라고 분명히 동의합니다. – nickf

4

사용 :

window["l"+a] 

예를 들어,

var a = "2"  // could be any value 

work(a); 

function work(a) 
{ 
l1 = "something"; 
l2 = "something else"; 
l3 = "something different"; 

alert(window["l"+a]); 
// alerts "something else" 
}; 

다른 방법으로, (가 글로벌 오염되지 않는 한 선호) 배열이나 객체 표기법

var a = "2"  // could be any value 

work(a); 

function work(a) 
{ 
var l = ["something", "something else", "something different" ]; 

alert(l[a]); 
// alerts "something else" 
}; 
1

스위치를 사용하십시오

function match(a) 
{ 

switch(a) 
    { 
    case 1: 
    alert("something"); 
    break; 
    case 2: 
    alert("something else"); 
    break; 
    case 3: 
    alert("something different"); 
    break; 
    default: 
    alert("No match!"); 
    } 

} 
관련 문제