2016-11-21 4 views
0

잠재적 인 CSRF 공격을 막기 위해 사용되는 브라우저 (있는 경우)를보기 위해 사용자 에이전트 헤더를 사용한다고 가정합니다. 사용자 에이전트 헤더가 필요없는 무수히 많은 CSRF 방어 시스템이 있다는 것을 알고 있지만 사용자 에이전트 헤더가 얼마나 안전한지 알고 싶습니다. CSRF 공격자가 원하는대로 수정할 수 있습니까?CSRF 공격 : 자바 스크립트를 사용하여 사용자 에이전트 헤더를 수정할 수 있습니까?

오리진 헤더와 리퍼러 헤더가 forbidden headers이기 때문에 그러한 수정으로부터 잘 보호된다는 것을 알고 있습니다. 그러나 사용자 에이전트 헤더는 나타나지 않습니다.

이것은 CSRF 공격자가 사용자 에이전트 헤더를 쉽게 변경할 수 있다는 것을 의미합니까? this에 따르면, 수행 할 수 없습니다. 그러나 왜 '금단의'목록에 포함되지 않는 이유가 궁금합니다. 내가 잘못 읽고있는 것이 있습니까? Referer 및 Origin 헤더만큼 보호됩니까?

미리 감사드립니다.

+0

사용자가 사용자 에이전트를 스푸핑 할 수 있는지 묻는 경우 대답은 '예'입니다. [매우 쉽게.] (http://www.howtogeek.com/113439/how-to-change-your-browsers-user-agent-without-installing-any-extensions/) –

+0

해커에게 이점이 있어야합니다. 사용자 에이전트 헤더를 수정 하시겠습니까? – gus27

+0

예, 사용자가 사용자 에이전트를 스푸핑 할 수 있습니다. 또한 원점 헤 더와 리퍼러 헤더를 스푸핑 할 수 있습니다. 그러나 CSRF 공격자는 사용자의 브라우저에 대한 제어권이 없기 때문에 원점 또는 리퍼러 헤더를 스푸핑 할 수 없습니다. 사용자 에이전트 헤더는 어떻습니까? – ineedahero

답변

0

명백히 사용자 에이전트는 요청 헤더 일 뿐이며 브라우저 외부의 요청 (예 :) 또는 다른 브라우저 확장 또는 도구에 대해 이야기하는 중이라면 을 쉽게 위조 할 수 있습니다.

브라우저에서 실행중인 Javascript의 경우 (예 : CSRF 시나리오와 같은 경우) 상황이 혼합됩니다. 오래된 XmlHttpRequest 인터페이스를 사용하면 User-Agent 헤더를 변경할 수 없습니다. 그러나 Chrome 43+, Edge 14+, Firefox 39+ 및 Opera 29+에서 지원되는 새로운 Fetch API은 있지만 IE와 Safari에서는 지원되지 않습니다. 지원하는 브라우저 중에도 차이점이 있습니다.

이 코드 고려해

var myHeaders = new Headers(); 
myHeaders.append("User-Agent", "anything you like"); 

var setup = { method: 'GET', 
       headers: myHeaders, 
       mode: 'cors', 
       cache: 'default' }; 

fetch('somefile.txt', setup) 
.then(function(response) { 
    return response.blob(); 
}); 

내가 리눅스에 크롬 54.0.2840.100이 시도를하고, 요청 사용자 에이전트는 기본 크롬 사용자 에이전트이었다. 그러나 Firefox 50.0에서 이것을 실행하면 실제로 사용자 정의 사용자 에이전트가 전송됩니다.

분명히 Fetch 사양에 따라 가능해야하지만 브라우저는 이것을 평소와 다르게 구현합니다.

또한 브라우저 (특히 이전 버전의 Java 또는 Flash)에 플러그인이 설치된 경우 Referer, Origin 또는 사용자 에이전트와 같은 요청 헤더를 위조 할 수 있습니다.