문제

JavaScript를 생성하고 실행하는 기능이 필요한 Flex 애플리케이션이 있습니다.여기서 말하는 것은 Flex 애플리케이션에서 생성한 원시 JavaScript를 실행해야 한다는 의미입니다(단지 기존 JavaScript 메서드가 아님).

현재 다음 JavaScript 메서드를 노출하여 이 작업을 수행하고 있습니다.

function doScript(js){ eval(js);}

그런 다음 Flex에서 다음과 같은 작업을 수행할 수 있습니다(참고:실제 Flex 앱의 경고 상자보다 더 실질적인 작업을 수행하고 있습니다.)

ExternalInterface.call("doScript","alert('foo'));

내 질문은 이것이 보안 위험을 초래하는가입니다. Flex와 JasvaScript가 모두 클라이언트 측에서 실행되기 때문에 그렇지 않다고 가정합니다.

이를 수행하는 더 좋은 방법이 있습니까?

도움이 되었습니까?

해결책

첫 번째 인수인 JavaScript 함수는 필요하지 않습니다. ExternalInterface 임의의 JavaScript 코드일 수 있으며 함수 이름일 필요는 없습니다(문서에는 그렇게 나와 있지만 잘못된 이름입니다).

이 시도:

ExternalInterface.call("alert('hello')");

다른 팁

이는 본질적으로 위험하지는 않지만 사용자가 제공한 데이터를 함수에 전달하는 순간 코드 삽입 공격에 적합합니다.그것은 걱정스럽고 피하고 싶은 것입니다.내 생각에 더 나은 접근 방식은 내가 사용하는 기능만 노출하는 것입니다. 필요, 그리고 그 이상은 없습니다.

제가 아는 한, 저는 확실히 해커가 아닙니다. 당신은 전혀 괜찮습니다.실제로 누군가가 원한다면 클라이언트 측에서 귀하의 코드를 악용할 수 있지만 자바 스크립트를 사용하여 서버 측 코드를 어떻게 악용할 수 있는지 모르겠습니다(서버 측 자바 스크립트를 사용하지 않는 한).

eval을 호출하여 이미 수행할 수 없는 작업을 수행할 수 있는 위치가 어디인지 알 수 없습니다.여기에 보안 구멍이 있으면 보이지 않습니다.

또한 스크립트 작업은 문의 "AllowScriptAccess" 태그에 의해 제어된다는 점을 기억하세요.웹페이지에서 이러한 작업을 원하지 않으면 스크립트 호출을 허용해서는 안 됩니다.

http://kb.adobe.com/selfservice/viewContent.do?externalId=tn_16494

ExternalInterface.call("eval", "alert('hello');");
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top