2017-04-05 5 views
4

서버에서 브라우저에서 실행중인 Flash 클라이언트의 요청 대 일반 XMLHttpRequest의 요청을 식별 할 수 있습니까?Flash 클라이언트와 JavaScript 클라이언트의 요청을 식별하는 방법은 무엇입니까?

X-Requested-With:ShockwaveFlash/25.0.0.127 

이 표준 헤더, 아니면이 행동이 다른 브라우저 \ 플래시 버전의 차이가있다 :

나는이 헤더를 가지고, 요청이 플래시를 사용하여 만든 것으로 나타났습니다?

+1

사실 원시 소켓을 플래시로 열 수 있다는 점을 고려하여 항상 "일반"xhr의 사용자 에이전트/헤더를 복사하여 소켓을 통해 보낼 수 있습니다. 그러면 요청을 어떻게 차별화 할 수 있습니까? 차이가 있더라도 버전이 다른 여러 브라우저가 그 차이를 유지한다는 것을 누구가 보장합니까? –

+1

XMLHttpRequests는 비슷한 헤더 인'X-Requested-With : XMLHttpRequest'를 가지고 있습니다. 이들은 스푸핑 될 수 있으므로 의존 할 수는 없지만 플래시 헤더는 일반적인 클라이언트 감지 측면에서 상당히 신뢰할 만합니다. – lofihelsinki

+0

@lofihelsinki 플래시 만 구별 할 수 있어야하므로 대부분의 경우를 커버 할 수 있습니다. – Lizozom

답변

1

HTTP 헤더 Referer을 사용하여 요청이 플래시 또는 JavaScript로 이루어 졌는지 확인할 수 있습니다. Flash에서 요청한 경우 Referer은 .swf 객체의 URL입니다. 따라서 URL에 Referer URL에 .swf 리소스가 포함되어있는 경우 요청이 플래시에서 발생해야합니다.

ActionScript 3.0 document에 따르면 Referer은 최종 사용자가 정의 할 수없는 제한된 헤더입니다. JavaScript 측에서는 JS 프로그래머가 해킹하지 않는 한 Referer.../xxx.swf 인 HTTP 요청을 보지 않을 것입니다.

X-Requested-With의 경우 표준 HTTP 헤더가 아니므로 신뢰할 수 없습니다. URLRequest API에서도 X-Requested-With은 제한되지 않고 최종 사용자가 정의 할 수 있습니다. doc을 참조하십시오.