2014-07-24 3 views
-1

Javascript 문자열을 속성에 연결하여 다시 사용할 수있는 실제 함수로 변환하려고합니다.자바 스크립트가 포함 된 문자열을 자바 스크립트로 변환하는 방법은 무엇입니까?

var fn = 'function say(something) { alert(something); }'; 
fn.say('hello'); 
fn.say('world'); 

저는 이것을 실제로 구현하고 싶지 않습니다 ... 순수한 자바 호기심입니다.

+2

[평가 ** (**) (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) 당신의 친구입니다! – adeneo

+1

@adeneo 답장으로 답해야합니다 : D –

+1

@RaulGuiu - eval은 악마 답니다. 아주 좋은 대답은 아니며, 진정한 대답은 OP가이 작업을 전혀해서는 안된다는 것입니다. – adeneo

답변

0

eval() 기능을 사용하려고합니다. 하지만 위의 내용은 fn 변수에 속성을 만들지 않습니다. 대신에 fn에 할당 할 함수를 만듭니다. 당신은 속성 객체를 만들려면 say 대신이 시도 :이 say라는 이름의 속성을 포함하는 객체로 확인 표현식을 평가

var fn = eval('({ say: function (something) { alert(something); }})'); 

. 또한

fn.say('hello'); 

, eval() 가져 있다는 사실에 대한 몇 가지 용도가 모든 방탄에도 불구하고이 속성 값은 위에서 설명한 것처럼 호출 할 수있는 기능입니다.

  • JSON 전환 스페이스 사이
  • 이동 정의 JavaScript 코드
  • 동적 코드 재기록 사출
  • 생성 metalanguages ​​아득히 보안 문제 등

  • 최소화하고 난독, eval() 그 자체는 코드에 명백한 취약점을 추가하지 않습니다. 무책임한 무언가 (사용자 입력에 eval() 등으로 전화하는 것과 같은)를하지 않는 한, 평가에 영향을 끼치 지 않는 평가판은 아무 것도 없습니다. 종종 제공되는 인수는 서버에서 반환 된 내용을 평가할 때 보안 위협입니다. 이 위협은 서버를 신뢰할 수 없다고 가정합니다.이 경우 더 큰 문제가있을 수 있습니다. 흔히 사용되는 또 다른 인수는 중간자 공격 (man-in-the-middle) 공격입니다. 누군가가 악성 컨텐트를 리소스 요청에 주입하는 경우입니다. 다시 한번, 이것이 일어나고 있다면 우리는 더 큰 관심을 가질 것입니다. < 스크립트 SRC = "">
  • 복귀를 통해로드 자바 스크립트 공격자 제어 코드를 반환

    • : 공격자가 서버 응답에 악성 콘텐츠를 삽입 할 수있는 기능이있는 경우, 다음 것을 방지 아무것도 없다 JSON-P 요청에 대한 공격자 제어 코드 아무 것도 변경하지 않고 쿠키 및 사용자 데이터를 훔치는

    결론은 종종 eval()를 사용하지 위해 만들어진 보안 위협 인수가 될 것입니다 위협이 있다는 것입니다 피싱에 사용되는 공격자 제어 HTML과 CSS를 반환

  • 코드가 eval()을 사용하는지 여부에 관계없이 문제가 발생합니다. 다른 사람들이 말하는 것에도 불구하고 eval()은 도구 상자의 다른 도구 일뿐입니다. 부주의하게 사용하지 말고, 다른 코드가 더 나은 곳에서 사용하십시오. 그러나 더글라스 크록 포드 (Douglas Crockford)가 알려주더라도 그것을 완전히 무시하지 마십시오.

    희망이 도움이됩니다.

    참조 :
    Secrets of the JavaScript Ninja
    eval() isn't evil, just misunderstood

  • 관련 문제