크로스 사이트 요청 위조를 방지하기위한이 아이디어의 논리적 루프 구멍이 있습니까?

StackOverflow https://stackoverflow.com/questions/1072497

문제

응답에 더 많은 토큰을 추가하는 데 의존하는 몇 가지 XSRF 솔루션을 읽었으며, 이는 게시물에서만 실행되는 코드를 보호하는 데 도움이됩니다.

즉, 이것은 HTTP get에 응답하는 페이지에 의존하는 한 단계 공격입니다.

<img src="http://amazon.com/buybook/anarchistscookbook/mailto/me/execute.php">

그러나 jQuery와 같은 더 나은 라이브러리를 사용하면 악성 JavaScript XMLHTTPREQUEST 스크립트를 작성하기가 쉬워지면서 두 단계 공격 (anti-XSRF ViewState/Query String/Extra Cookie 등을 구문 분석 한 다음 게시물을 제출할 수 있습니다. (또는 그것은 곧 AE가 금이간에 대해 걱정하지 않습니다. 2 단계 XSRF 공격에 대해 걱정해야합니다.

나는 한 단계의 공격이 주로 민감한 일을하지 않음으로써 대부분의 종류의 공격을 할 수 있다고 생각합니다. 웹 사이트 사용자에게 보안 문자를 해결하도록 요구함으로써 두 종류의 공격을 모두 할 수 있다고 생각합니다. 나머지 세션?

지금까지 OCR 소프트웨어가 텍스트를 읽을 수있는 경우 또는 기계적 투르크 구성 요소가있는 경우와 같이 보안 문자가 실패했을 때만 실패하는 것 같습니다.

편집 : 특정 공격은 XHR JavaScript 또는 이미지 태그가있는 이메일입니다. 따라서 코드는 이메일 클라이언트의 브라우저 또는 로컬 파일 시스템에서로드 된 HTML 페이지에서 실행됩니다. 단순화를 위해, 사이트에 XSS 취약성이 없다고 상상하고 있습니다 (즉, 악의적 인 사용자가 HTML을 HTML에 주입 할 수있는 기회가 없습니다. 사이트는 사이트가 응답으로 보냅니다).

도움이 되었습니까?

해결책

요점은 JavaScript가 Cross-Domain 컨텍스트에서 anti-xsrf 토큰을 읽을 수 없으며 Xmlhttprequest는 동일 원산지에만 해당하므로 토큰을 훔치는 데 사용할 수 없다는 것입니다.

귀하의 사이트에 이미 XSS 취약점이있는 경우 이미 호스가 발생했으며 Anti-XSRF 토큰이 도움이되지 않습니다.

다른 팁

요즘 xmlhttprequests 나 JavaScript 프레임 조작 작업은 크로스 도메인; 그것은 깎아 지른 광기 일 것입니다. 요즘 CSRF 공격은 일반적으로 언급 한 이미지 태그 또는 다른 사이트에 게시하는 양식을 자동 생성하는 것으로 구성됩니다. 그러나 anti-xSRF 토큰 (아마도 세션별로 생성 된 암호화 Nonce)을 검색하는 것은 불가능합니다. 사용자 세션을 확인하지 않는 가난한 토큰 인 경우에만 IP 주소가 서버 측 언어를 활용하여이를 검색 한 다음 클라이언트 측 CSRF와 결합 할 수 있습니다. 토큰 외에도 많은 사람들이 추천서를 확인하고 모든 원격 도메인을 차단하여 CSRF를 중지합니다. 도메인 제한 덕분에 xmlhttprequests로 CSRF를 제출하는 것은 사실상 불가능합니다.

어쨌든 xmlhttprequest가 원격 도메인에 액세스 할 수 있다는 것에 대해 걱정할 필요가 없습니다. 그런 일이 일어날 수있는 유일한 시간은 XSS 취약성이있는 경우, Ericlaw가 말했듯이 이미 호수를 겪고있는 경우입니다.

나는 당신이 동일한 원래 정책에 대해 혼란스러워한다고 생각합니다. 로컬 파일에있는 HTML 페이지를 요청 해도이 정책을 우회하지는 않습니다. 사실, 파일 리소스에 더욱 엄격한 규칙이 적용됩니다. 로컬 HTML 파일의 JavaScript가 ~ 아니다 비 국소 자원을다시피 보이도록 성공적인 요청을 할 수 있습니다.

최신 브라우저는 로컬 HTML 파일에서 원격 HTTP 리소스에 대한 액세스를 허용하지 않습니다.

어떤 브라우저에서 /// resource 파일에서 크로스 도메인 XHR을 성공적으로 수행 할 수 있었습니까?

IE6, IE7, IE8, Firefox 3, Firefox 3.5 및 Windows의 Chrome, Opera 및 Safari의 최근 버전에서 이것을 테스트했습니다. 그들은 모두 크로스 도메인 HTTP 요청을 거부합니다.

<html>
<head>
<script 
  type="text/javascript" 
  src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
  $(document).ready(function() {
    $( '#xhr' ).append( 'replace me with remote xhr' );
    $( '#xhr' ).load( 'http://stackoverflow.com/', function() {
      $( '#xhr' ).append( 'xhr load complete' );        
    });
  });
</script>
</head>
<body>
  test
  <div id="xhr">original</div>
</body>
</html>

훨씬 오래된 브라우저가 덜 제한적 일 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top