Proteger os seus utilizadores contra ataques XSS baseados no DOM

proteger os seus utilizadores contra ataques XSS baseados no DOM

Cross-site scripting (XSS) é um dos sites de ataque mais comuns dos wayshackers. Vulnerabilidades XSS permitem que um usuário malicioso execute pedaços arbitrários de JavaScript quando outros usuários visitam seu site.

XSS é a vulnerabilidade de segurança mais comum publicamente relatada, e parte do conjunto de ferramentas de todos os hackers.

Riscos

Prevalência Raro

De Exploração E Fácil

Impacto Prejudicial

com base no DOM de ataques XSS ter todos os riscos associados com outros tipos de ataque de XSS, com theadded bônus que eles são impossíveis de detectar a partir do lado do servidor.Qualquer página que use fragmentos URI está potencialmente em risco de ataques XSS.

protecção

protecção contra ataques XSS baseados no DOM é uma questão de verificar se o seu javascript não interpreta os fragmentos URI de uma forma insegura. Existem várias formas de O garantir.

Use a JavaScript Framework

Frameworks like AngularJS and React use templates that makes construction of ad-hoc HTML an explicit (and rare) action. Isso irá empurrar sua equipe de desenvolvimento para as melhores práticas, e tornar as operações inseguras mais fáceis de detectar.

AngularJS

Angular de qualquer conteúdo dinâmico escritos entre chaves será automaticallybe escapou, de modo que o seguinte é seguro:

 <div>{{dynamicContent}}</div>

desconfie de qualquer código que liga conteúdo dinâmico para o innerHTML attributesince que não vai ser encerradas automaticamente:

 <div ="dynamicContent"></div> <div innerHTML="{{dynamicContent}}"></div>
Reagir

Em Reagir de qualquer conteúdo dinâmico escritos entre chaves será automaticallybe escapou, de modo que o seguinte é seguro:

render() { return <div>{dynamicContent}</div>}

Reagir permite a você escrever HTML através da ligação de conteúdo para o dangerouslySetInnerHTML propriedade, que é nomeado para lembrá-lo do risco de segurança! Cuidado com qualquer código que se pareça com o seguinte:

render() { return <div dangerouslySetInnerHTML={ __html: dynamicContent } />}
audite o seu código com cuidado

às vezes um framework JavaScript completo é muito pesado para o seu site.In nesse caso, terá de proceder regularmente a revisões de códigos para detectar localizações com uma referência window.location.hash. Considere chegar a padrões de codificação acordados sobre como fragmentos de URI devem ser escritos e interpretados, e centralize esta lógica em uma biblioteca central.Se utilizar JQuery, verifique cuidadosamente qualquer código que utilize a função html(...). Se você está construindo HTML raw no lado do cliente na parte de trás da entrada não confiável, você pode ter um problema, se a entrada vem de um fragmento URI ou não. Use a função text(...) sempre que possível.

Se você estiver usando direto o nativo APIs do DOM, evite utilizar o followingproperties e funções:

  • innerHTML
  • outerHTML
  • document.write

em Vez disso, defina o conteúdo do texto dentro de tags, sempre que possível,:

  • textContent
Parse JSON cuidadosamente

não avalie JSON para convertê – lo em objetos JavaScript nativos-por exemplo, usando a função eval(...). Em vez disso, utilize JSON.parse(...).

detecta código inseguro usando ferramentas de desenvolvimento

o pacote Burp, produzido pela empresa de segurança PortSwigger,pode ser usado para detectar vulnerabilidades baseadas em DOM.

não utilize quaisquer fragmentos de URI!

o código mais seguro é o código que não existe. Se você não precisa usar fragmentos URI, então não use! Escreva um teste de unidade para digitalizar o seu JavaScript para menções de window.location.hash, e faça com que ele falhe se o padrão for encontrado. Quando há uma necessidade de usar fragmentos URI, então você pode discutir como garantir o seu uso seguro.

implementa uma política de segurança de conteúdo

os navegadores modernos suportam Políticas de segurança de conteúdo que permitem ao autor de uma página web controlar onde JavaScript (e outros recursos)podem ser carregados e executados. Os ataques XSS dependem do atacante ser executável para executar scripts maliciosos na página web de um usuário – quer por injeção de tags inline <script> em algum lugar dentro da tag <html> de uma página, ou enganando o navegador para carregar o JavaScript a partir de um domínio de terceiros malicioso.

definindo uma política de segurança de conteúdo no cabeçalho da resposta, você cantell o navegador para nunca executar JavaScript inline, e para bloquear domínios que podem hospedar JavaScript de uma página:

Conteúdo-Segurança-Política: script-src ‘self’ https://apis.google.com

ao whitelisting os URIs a partir dos quais os scripts podem ser carregados, você está implicitamente afirmando que o JavaScript inline não é permitido.

a Política de segurança dos conteúdos também pode ser definida numa etiqueta <meta> no elemento <head>da página:

<meta http-equiv="Content-Security-Policy" content="script-src 'self' https://apis.google.com">

esta abordagem irá proteger os seus utilizadores de forma muito eficaz! No entanto, pode levar uma quantidade considerável de disciplina para tornar o seu site pronto para tal cabeçalho.As etiquetas de scripts Inline são consideradas uma má prática no moderno desenvolvimento web-mixagem de Conteúdo e Código torna as aplicações web difíceis de manter – mas é comum em sites antigos e antigos.

migrar de inline scripts de forma incremental, considere a possibilidade de usar ingredientes ofCSP Violação Reports.By adicionar um report-uri diretiva no seu cabeçalho de política, o navegador willnotify-lo de quaisquer violações de políticas, em vez de prevenir inline JavaScriptfrom execução:

Conteúdo-Segurança-Política-Relatório: script src ‘self’; relatório-uri http://example.com/csr-reports

Isto dar-lhe-á a garantia de que não existem guiões em linha,antes de os banir completamente.

Ler Mais

  • Como Cross-site Scripting obras
  • Introdução a Política de Segurança de Conteúdo
  • PSI (Política de Segurança de Conteúdo) no Mozilla Developer Network
  • DOM Base de Vulnerabilidade de Script entre sites
  • Política de Segurança de Conteúdo Explicado
Cross-site Scripting

XSS Refletido

Deixe uma resposta

O seu endereço de email não será publicado.