Pergunta

Em ASP.NET MVC 1.0, há um novo recurso para lidar com cruz problema de segurança falsificação pedido local:

 <%= Html.AntiForgeryToken() %>
[ValidateAntiForgeryToken]
public ViewResult SubmitUpdate()
{
    // ... etc
}

Eu encontrei o token gerado em html formulário de ficar mudando a cada vez que um novo formulário é renderizado.

Eu quero saber como estes token é gerado? E quando usar algum software para digitalizar neste site, ele irá relatar outro problema de segurança: Sessão fixo. Por quê? Desde o sustento símbolo mudado, como pode este problema vem?

E há uma outra função, que é "sal" para o antiForgeryToken, mas eu realmente sei o que este utilizado para, mesmo através de nós não usamos "sal" para gerar o token, a vontade símbolo muda o tempo todo, então, por que tem essa função?

Foi útil?

Solução

Muita informação sobre a AntiForgeryToken aqui: http://blog.codeville.net/2008/09/01/prevent-cross-site-request-forgery-csrf-using-aspnet-mvcs-antiforgerytoken-helper/

Isso é para evitar um Request Forgery Cross-Site (CSRF). É um comportamento bastante normal para clicar em 'Save' preencher um formulário e realizar alguma ação no servidor, ou seja, salvar detalhes de um usuário. Como você sabe que o usuário enviar o formulário é o usuário que dizem ser? Na maioria dos casos você pode usar alguns biscoitos ou janelas auth base.

O que se um intruso iscas você para um site que apresenta exatamente a mesma forma em um pouco escondido IFRAME? Seus cookies obter apresentado intacto e o servidor não vê o pedido como qualquer diferente a um pedido legítimo. (Como gmail descobriu: http: //www.gnucitizen. org / blog / google-gmail-e-mail-hijack-técnica / )

Os anti-falsificação impede de token esta forma de ataque por criação de um sinal cada vez que uma página biscoito adicional é gerada. O token é tanto na forma e o cookie, se o formulário e cookies não correspondem temos um ataque de CSRF (como o atacante não seria capaz de ler o anti-falsificação de token usando o ataque descrito acima).

E o que o sal faz, a partir do artigo acima:

O sal é apenas uma seqüência arbitrária. Um valor diferente sal significa um sinal anti-falsificação diferente será gerado. Isto significa que mesmo se um atacante consegue se apossar de um token válido de alguma forma, eles não podem reutilizá-lo em outras partes da aplicação, onde é exigido um valor sal diferente.

Update: Como é gerado o token? Faça o download do fonte e ter um olhar para as classes AntiForgeryDataSerializer, AntiForgeryData.

Outras dicas

Você tem fazer algumas problemas não relacionados:

  1. Não sei por que o seu software de segurança está relatando 'sessão fixo'. Tente ler a documentação que vem com o relatório
  2. O anti-falsificação token:

Isto é usado (presumivelmente) para validar que cada pedido é válido. Por isso, considero que alguém tenta apresentar um link para o ?x=1 página, se o token não é também passou, o pedido será rejeitado. Além disso, ele (pode) evitar a postagem duplicada do mesmo item. Se você clicar em 'post' duas vezes, a mudança provavelmente vontade de token (cada pedido), e neste caso será detectado através de algo como:

Session["nextToken"] = token;
WriteToken(token);

...

if( !Request["nextToken"] == Session["nextToken"] ){
    ...
}

// note: order in code is slightly different, you must take the token
// before regenerating it, obviously

Eu acho que o prazo para isso (o ataque ele protege) é chamado de "CSRF" (Cross-Site Request Forgery), nos dias de hoje.

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