Flex에서 JavaScript 실행:이 자바스크립트 기능은 위험합니까?
-
09-06-2019 - |
문제
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');");