Javascript 문자열을 속성에 연결하여 다시 사용할 수있는 실제 함수로 변환하려고합니다.자바 스크립트가 포함 된 문자열을 자바 스크립트로 변환하는 방법은 무엇입니까?
var fn = 'function say(something) { alert(something); }';
fn.say('hello');
fn.say('world');
저는 이것을 실제로 구현하고 싶지 않습니다 ... 순수한 자바 호기심입니다.
Javascript 문자열을 속성에 연결하여 다시 사용할 수있는 실제 함수로 변환하려고합니다.자바 스크립트가 포함 된 문자열을 자바 스크립트로 변환하는 방법은 무엇입니까?
var fn = 'function say(something) { alert(something); }';
fn.say('hello');
fn.say('world');
저는 이것을 실제로 구현하고 싶지 않습니다 ... 순수한 자바 호기심입니다.
eval()
기능을 사용하려고합니다. 하지만 위의 내용은 fn
변수에 속성을 만들지 않습니다. 대신에 fn
에 할당 할 함수를 만듭니다. 당신은 속성 객체를 만들려면 say
대신이 시도 :이 say
라는 이름의 속성을 포함하는 객체로 확인 표현식을 평가
var fn = eval('({ say: function (something) { alert(something); }})');
. 또한
fn.say('hello');
, eval()
가져 있다는 사실에 대한 몇 가지 용도가 모든 방탄에도 불구하고이 속성 값은 위에서 설명한 것처럼 호출 할 수있는 기능입니다.
의
eval()
그 자체는 코드에 명백한 취약점을 추가하지 않습니다. 무책임한 무언가 (사용자 입력에 eval()
등으로 전화하는 것과 같은)를하지 않는 한, 평가에 영향을 끼치 지 않는 평가판은 아무 것도 없습니다. 종종 제공되는 인수는 서버에서 반환 된 내용을 평가할 때 보안 위협입니다. 이 위협은 서버를 신뢰할 수 없다고 가정합니다.이 경우 더 큰 문제가있을 수 있습니다. 흔히 사용되는 또 다른 인수는 중간자 공격 (man-in-the-middle) 공격입니다. 누군가가 악성 컨텐트를 리소스 요청에 주입하는 경우입니다. 다시 한번, 이것이 일어나고 있다면 우리는 더 큰 관심을 가질 것입니다. < 스크립트 SRC = "">결론은 종종 eval()
를 사용하지 위해 만들어진 보안 위협 인수가 될 것입니다 위협이 있다는 것입니다 피싱에 사용되는 공격자 제어 HTML과 CSS를 반환
eval()
을 사용하는지 여부에 관계없이 문제가 발생합니다. 다른 사람들이 말하는 것에도 불구하고 eval()
은 도구 상자의 다른 도구 일뿐입니다. 부주의하게 사용하지 말고, 다른 코드가 더 나은 곳에서 사용하십시오. 그러나 더글라스 크록 포드 (Douglas Crockford)가 알려주더라도 그것을 완전히 무시하지 마십시오. 희망이 도움이됩니다.
참조 :
Secrets of the JavaScript Ninja
eval() isn't evil, just misunderstood
[평가 ** (**) (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) 당신의 친구입니다! – adeneo
@adeneo 답장으로 답해야합니다 : D –
@RaulGuiu - eval은 악마 답니다. 아주 좋은 대답은 아니며, 진정한 대답은 OP가이 작업을 전혀해서는 안된다는 것입니다. – adeneo