Pergunta

Como podemos lidar com a injeção de JavaScript no aplicativo asp.net MVC (C #)?

Eu posso usar Html.Encode na minha tela. Mas o problema é que eu tenho html também para mostrar na página como um post.

Eu preciso remover o script entrou nos elementos de entrada do aplicativo? Como posso fazer isso em um lugar comum?

Foi útil?

Solução

A "de alto nível" melhor prática para fazer isso é:

  • Loja de entrada do usuário a forma como foi inserido no sistema
  • HTML codificar todas de entrada do usuário quando ele é emitido em qualquer página
  • Use uma abordagem de lista branca "de-encode" caracteres HTML permitidos, atributos, valores de atributos, etc. que você codificado no passo anterior

HTML Codificação de entrada do usuário na saída vai parar JavaScript seja executado em seu site.

As razões pelas quais você deseja armazenar de entrada do usuário "como entrou" é porque você pode no futuro decidir dados de saída do usuário em outros formatos (PDF, e-mail, JavaScript, RSS, etc) que não têm o mesmo regras para a codificação. Como resultado, você deve manter os dados o mais próximo à sua forma original possível. Isso vai tornar as coisas mais fáceis de lidar com mais tarde.

Para HTML Codificação de entrada do usuário, você pode usar System.Web.HttpUtility.HtmlEncode(...) .

Para combinar as etapas 2 e 3, você pode usar AntiXSS biblioteca da Microsoft. Ele fornece alguns métodos de codificação extras que a classe HttpUtility não fornece para tornar seu trabalho mais fácil. Eu não sabia até que Malcolm apontou nos comentários, que a versão mais recente desta biblioteca inclui um método chamado GetSafeHtmlFragment(...) que irá remover todo o JavaScript manualmente. Isto irá lidar com todo o trabalho pesado de remoção de código JavaScript inserido pelo usuário para você. Você provavelmente vai querer usar GetSafeHtmlFragment e não GetSafeHtml, que se destina a todo codificar documentos HTML.

nota menor: Leia as opiniões do mais recente lançamento AntiXSS (janeiro de 2012, no momento da escrita deste) se você encontrar funcionalidade não está funcionando como o esperado. Você pode querer considerar o uso de uma versão mais antiga dependendo de suas necessidades, embora esteja ciente de que versões mais antigas tenham problemas conhecidos de segurança neles. Microsoft reconheceu o problema e está olhando para uma solução.

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