Pergunta

Eu li várias soluções XSRF que contam com a adição de mais tokens, até a resposta, que fazem ajuda código de proteção que só roda em POST.

i. este seria um ataque a um passo contando com uma página que responde a HTTP GET

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

Mas com melhores bibliotecas como jquery, está ficando mais fácil para escrever scripts javascript XmlHttpRequest maliciosos, que podem fazer um ataque etapa dois (a GET, analisar o Anti-XSRF viewstate / string query / bolinho extras etc) e, em seguida, enviar um POST . (Ou é? Eu não me preocupo com AES estar rachado qualquer momento em breve, eu deveria mesmo se preocupar com ataques XSRF 2 passo visando ações HTTP POST se tornando tão fácil como o ataque tag img mostrado acima?)

Suponho que o ataque um passo pode ser maioritariamente tharted por não fazer nada Sensive em GET, poderia ser tharted ambos os tipos de ataques, exigindo que o usuário do site para resolver um CAPTCHA, que, em seguida, rende uma seqüência de consulta token que faria ser necessário para todos os URLs para o resto da sessão?

Até agora parece que ele só iria falhar quando CAPTCHA falhar, como se o software OCR pode ler o texto ou se existe um componente Mechanical Turk.

EDIT: O ataque específico em mente é um e-mail com javascript xhr ou tag de imagem. Assim, o código seria executado em navegador do cliente de e-mail ou de uma página HTML carregado a partir do sistema de arquivos local. Para simplicidades amor, eu estou imaginando o site não tem vulnerabilties XSS (ie. Sem oportunidades para usuários maliciosos para injetar seu HTML no HTML do site envia como respostas)

Foi útil?

Solução

O ponto é que o JavaScript não pode ler o anti-XSRF símbolo de um contexto de domínio cruzado, e XMLHTTPRequest é de mesma origem única, por isso não pode ser usado para roubar o token.

Se o seu site já tem uma vulnerabilidade de XSS, você já está metralhado e tokens, anti-XSRF não vai ajudá-lo.

Outras dicas

Nem XMLHttpRequests nem quadro de manipulação de trabalho cross-domain javascript nos dias de hoje; que seria pura loucura. CSRF ataca estes dias consistem geralmente em qualquer tag de imagem como você mencionou ou autogenerating um formulário que POSTs para outro site. No entanto, a recuperação de um token de anti-XSRF (presumivelmente um nonce criptográfico gerado em uma base por sessão) é quase impossível. Só se é um token extremamente pobre que não verifica a sessão do usuário e endereço IP poderia uma linguagem do lado do servidor, possivelmente, ser aproveitado para recuperá-lo e, em seguida, combiná-lo com um CSRF do lado do cliente. Além de fichas, muitas pessoas param de CSRF simplesmente, verificando as referências e bloqueando todos os domínios remotos. Submeter CSRF com XMLHttpRequests é praticamente impossível graças a restrições de domínio.

De qualquer forma, você não precisa se preocupar com XmlHttpRequest ser capaz de acessar um domínio remoto. A única vez que algo assim poderia acontecer é se você tem uma vulnerabilidade de XSS, caso em que, como EricLaw disse, você já está metralhado.

Eu acho que você está confuso sobre a política de mesma origem. Solicitando uma página html que está em um arquivo local não contornar esta política. Na verdade, eu acredito até regras mais estritas aplicam-se a um recurso de arquivo. Você vai descobrir que o Javascript em um arquivo html local irá não ser capaz de fazer um pedido bem sucedida para recuperar um recurso não-local.

Navegadores modernos não permitem Javascript em HTML local acessar arquivos para remoto HTTP recursos.

Em qual navegador você tem sido capaz de realizar com sucesso um XHR cross-domain de um arquivo: /// recurso

Eu testei isso no IE6, IE7, IE8, Firefox 3, Firefox 3.5 e versões recentes do Chrome, Opera e Safari no Windows; todos eles rejeitar o pedido cross-domain 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>

É possível que alguns navegadores muito mais velhos são menos restritivos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top