Sanitize HTML antes de armazenar no banco de dados ou antes de renderizar? (Biblioteca Antixss em Asp.net)

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

Pergunta

Eu tenho um editor que permite que os usuários adicionem HTML armazenados no banco de dados e renderizados em uma página da web. Como essa é a entrada não confiável, pretendo usar Microsoft.Security.Application.AntiXsSS.GetSafeHtmlFragment Para higienizar o HTML.

  • Devo servir antes de salvar no banco de dados ou antes de renderizar a entrada não confiável na página da web?
  • Existe uma vantagem em incluir o código -fonte do AntixSS no meu projeto em vez de apenas a DLL? (Talvez eu possa personalizar a lista branca?)
  • Qual arquivo de classe devo procurar a implementação real do getSafehtmlfragment
Foi útil?

Solução

Eu discordo da resposta selecionada por dois motivos

  1. Se você armazenou dados codificados, precisará escolher um codificador antes de armazenar. O que acontece se você armazenou algo como HTML, mas também deseja empurrá -lo em outro formato, por exemplo, como uma resposta JSON ou como parte de um documento XML? Agora você tem um formato codificado HTML que deve decodificar e codificar no formato correto.
  2. E se descobrirmos um bug nos codificadores e empurrar uma nova versão? Agora, porque você não está codificando no ponto de saída, todos os seus dados antigos podem conter coisas que foram codificadas incorretamente. Você pode codificar novamente, mas depois pressiona problemas de codificação dupla que podem ser dolorosos para filtrar corretamente.

Geralmente, você codifica no ponto de saída e trata algum dados proveniente de um armazenamento de dados como não confiável por padrão - afinal, e se alguém conseguir editar seu banco de dados diretamente ou via injeção de SQL?

Outras dicas

Ouça o Owasp Podcast 67 com Jeff Williams no XSS. Ele fala sobre não higienizar ou codificar antes do armazenamento. O principal motivo é que, se (quando) as bibliotecas evoluem em resposta a novas vulnerabilidades, seus dados serão presos na versão antiga. É claro que isso não o impede de executar qualquer entrada contra uma lista de permissões no ponto de entrada e rejeitar qualquer coisa fora do intervalo aceitável.

  • Ambos
  • Somente se você planeja alterá -lo, o que eu não faria pessoalmente
  • A classe Antixss (já que é chamada de AntiXss.GetSafeHtmlFragment())

Você pode usar a diretiva na página no parâmetro Validaterequest = "true". Dessa maneira, todos os dados de solicitação são validados e, se houver um problema de validação, você sempre poderá pegar o erro. Também impede os fios de injeção SQL e outros não apenas XSS possíveis.

Com dados numéricos, você pode validar o excesso inteiro ou o uso indevido de tipos de dados com int32.TryParse () ou qualquer outra família Tryparse (Byte.TryParse Int16.TryParse ...)

Não há necessidade de usar qualquer outra classe ou método de desinfetante adicional.

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