2010-11-29 8 views
3

다른 여러 SWF 파일에 대한 액세스를 제공하는 SWF 파일에 변수를 전달하고 있습니다. 아래의 THIS LINE 주석 아래 변수에 값을 할당하는 데 사용하는 행을 볼 수 있습니다.이것은 웹 애플리케이션의 취약점입니까?

<script type="text/javascript"> 
       /*THIS LINE*/ 
       var flashvars = {a: "<%= User.Identity.IsAuthenticated %>"}; 
       /* 
        Some other stuff here... 
       */ 
     swfobject.embedSWF("index.swf", "myAlternativeContent", "100%", "100%", "10.0", "expressInstall.swf", flashvars, params, attributes); 
    </script> 

나는 그들이 접근을 원하는 경우 HTTP 프록시를 사용하는 사람이 단지 false에서 true로 a의 값을 전환 할 수 있다는 우려입니다. 내가 걱정할 권리가 있니?

하위 SWF에 대한 액세스가 허용되는지 여부를 제어해야하는 다른 방법이 있습니까?

+0

당신이이 요청해야 http://security.stackexchange.com/ – AviD

답변

4

내가 액세스 권한이없는 것은 방출하지 않는다고 말할 수 있습니다. 이 경우 인증되지 않은 경우 해당 스크립트를 브라우저에 보내지 마십시오.

예, 걱정해야합니다.

흐름을 변경할 수 없다고 가정하면 (예 : 인증되지 않은 경우에도 스크립트를 보내야 함) "true/false"값을 키 유형으로 변경합니다. 아이들은 키가 실행되기 전에 통과되었는지 확인해야합니다.

가능하면 키 사용자를 지정하십시오.

이것은 완전히 문제를 해결하지는 않지만 누군가가 가지고 있지 않은 키를 제공하는 것이 더 어려울 것입니다.

는 UPDATE :
아주 좋은 의견을 바탕으로, 나는 다른 경로를 가지고있다.

웹 요청 처리기 (.ashx 파일)를 사이트에 추가하십시오. 클라이언트가 swf 파일을로드하도록 호출하도록합니다. 핸들러는 먼저 그들이 실제로 로그인되어 있는지 테스트해야합니다. 그렇다면 파일을 제공하십시오. 단지 연결을 닫지 않는 경우.

swfobject.embedSWF("grabFile.ashx?id=123", "myAlternativeContent", "100%", "100%", "10.0", "expressInstall.swf", flashvars, params, attributes); 

그런 다음 SWF 파일의 실제 내용을 response.writing 이전에 기록 된 귀하의 사이트 테스트에 .ASHX 요청 핸들러를 가지고 :

은 기본적으로 같은 것을 찾기 위해 삽입 라인을 변경합니다.

+0

그들은 단지 디 컴파일 할 수 없습니다 SWF를 제공하고 그들이 제공해야하는 핵심 요소를 파악하십시오. –

+1

첫 번째 요점은 의심 스럽습니다. 사용자가 로그인했을 때 자신의 페이지에서 스크립트 스 니펫을 얻으면 간단히 계정을 취소 한 다음 사이트로 돌아가서 (Firebug를 사용하여) 페이지에 동일한 스 니펫을 붙여 무료/무단 액세스를 얻을 수 있습니다. – orokusaki

+0

@Abe - 예. 약 30 초 후에 ActionScript를 온라인으로 디 컴파일 할 수 있습니다. 그것은 불명료 함을 통한 보안입니다. – orokusaki

1

예, 가능합니다. 보안은 클라이언트 측에서 작동하지 않으므로 서버에서 파일에 대한 액세스를 제어해야합니다.

0

예, 이것은 취약성이며이를 악용하기 위해 프록시를 사용할 필요가 없습니다. 사용자가 인증되지 않은 경우 서버에서 액세스를 거부해야합니다.

+0

음, 인증되지 않은 사용자는 응용 프로그램의 90 %에 액세스 할 수 있기를 바랍니다. 보호 된 SWF에 대한 액세스를 차단하는 가장 좋은 방법은 무엇입니까? 난 그냥 그것의 자신의 디렉토리에 드롭 후 .NET 인증을 사용해야합니까? –

+0

.NET 사양에 대해 많이 알지 못합니다. 사용자가 인증되었는지 테스트하고,있는 경우 파일을 제공하십시오. –

0

예. 사용자가 파이어 버그를 가지고 있다면 로그인했을 때 응용 프로그램의 코드가 어떻게 보이는지 간단히 볼 수 있으며, 로그인하지 않은 상태에서도 응용 프로그램의 코드가 어떻게 보이는지 간단히 볼 수 있습니다. 요청별로 인증을 처리해야하며 서버 측 . 당신이하려고하면 다음과 같은 경우,

그러나 등, 그들이 로그인 할 때

If User logged in: 
    Put Flash in page 
Else: 
    Put angry message 

사용자는 여전히 플래시 스 니펫 (snippet)을 복사 할 수 있으며,이 방화범으로 로그인하지 않은 경우 붙여 넣기 사용 :

Put Flash in page 
Listen for requests from the Flash app to the server (for database content): 
    If the User who requests content is logged in: 
     Return content 
    Else: 
     Return angry message 

이것은 작동합니다.

전체 앱이 플래시 기반 (즉, 데이터베이스 액세스가 필요하지 않음) 인 경우 서버 수준에서 폴더를 보호하는 것이 유일한 방법입니다 (Amember 등 참조). Flash 응용 프로그램을 인증 목적으로 서버와 동글이 의존하더라도 사용자는 Flash 스크립트를 다운로드하여 디 컴파일하고 무료로 배포 할 수 있습니다. 그들은 여전히 ​​폴더 보호 기능을 사용하여이 작업을 수행 할 수 있지만, 적어도 무료 사용자는 해당 액세스 권한을 가지지 않습니다. 가장 좋은 방법은 응용 프로그램이 서버에서 제공되는 내용에 의존하도록하는 것입니다.

+0

흥미로운 점은 ASP.NET에서 Flash를 사용해 본 경험이 거의 없습니다. 플래시에서 어떤 일이 발생했을 때 서버 측에서 어떻게해야합니까? 내가 할 수있는 일종의 사건이 있니? –

+0

@Abe - 저는 Flash 전문가는 아니지만 기본적으로 AJAX (모든 콘텐츠에 대해 서버에서 JSON을 반환합니다)와 동일한 작업을 수행 할 수 있습니다. 흐름 : 1) 사용자가 Flash 로그인 양식을 통해 로그인합니다. 2) 서버가 고유 세션 키로 응답합니다. 3) Flash 앱이 세션 키가있는 브라우저에 쿠키를 설정합니다. 4) Flash 응용 프로그램이 JSON 콘텐츠를 서버에서 요청합니다 (예 : 5) 귀하의 .Net 응용 프로그램은 신원을 확인하고 서버 (데이터베이스 또는하지 않음)에서 콘텐츠를 반환합니다. 6) Flash 응용 프로그램에 콘텐츠가 표시됩니다. – orokusaki

1

예, 않습니다 정적 HTML 페이지를 작성하는 공격자를 유지하고 어떤이 :

var flashvars = {a: "AUTHENTICATED"}; 
관련 문제