O cabeçalho de resposta HTTP Content-Security-Policy permite que o site controle quais recursos o agente de usuário carrega para uma determinada página. Exceto em casos especiais, o conjunto de políticas envolve principalmente especificar os pontos finais de origem e script do servidor. Isso ajudará a impedir ataques de scripting cross-site
Documentação:O login do hiperlink está visível.
Este artigo descreve a Política de Segurança de Conteúdo do W3C, ou CSP para abreviar. Como o nome sugere, essa especificação está relacionada à segurança de conteúdo e é usada principalmente para definir quais recursos uma página pode carregar e reduzir a ocorrência do XSS.
O Chrome inicial suportava CSP via cabeçalho de resposta X-WebKit-CSP, enquanto Firefox e IE suportavam X-Content-Security-Policy, e Chrome25 e Firefox23 começaram a suportar a política padrão Content-Security-Policy.
Informações sensíveis sobre aplicações web, como nomes de usuário, senhas, nomes de máquinas e/ou localizações sensíveis de arquivos, podem ser coletadas Usuários iniciantes podem ser persuadidos a fornecer informações sensíveis, como nomes de usuário, senhas, números de cartão de crédito, números de seguridade social, etc
Primeiro, vamos criar um novo projeto ASP.NET MVC, criar um novo script js e carregar dinamicamente o código js das estatísticas do Baidu, da seguinte forma:
Como mostrado na figura acima, podemos ver o código do script JS que foi introduzido com sucesso em um terceiro (Baidu), se houver algum código malicioso no JS de terceiros, como roubo de cookies, modificação de conteúdo, troca de links, etc.
Como posso impedir a introdução de scripts JS de terceiros inseguros?
Solução alternativa
Cabeça de respostaAdicionar "Política de Segurança-Conteúdo"por exemplo:
Diretiva | Exemplo de valor de instrução | ilustrar | Default-SRC | 'eu' cnd.a.com | Defina a política padrão de carregamento para todos os tipos de recursos (JS, IMAGEM, CSS, WEB FONT, requisições AJAX, iframes, multimídia, etc.) e use o padrão para certos tipos de recursos se não houver uma política definida separada. | script-src | 'eu' js.a.com | Defina uma política de carregamento para JavaScript. | style-src | 'eu' css.a.com | Defina uma política de carregamento para um estilo. | IMG-SRC | 'eu' img.a.com | Defina uma política de carregamento para imagens. | connect-src | 'eu' | Carregando políticas para requisições de Ajax, WebSockets, etc. Se não for permitido, o navegador simula uma resposta com status 400. | font-src | font.a.com | Política de carregamento para WebFont. | object-src | 'eu' | <object><embed> <applet> Políticas de carregamento para plugins como flash introduzidas para tags como , ou . | media-src | media.a.com | <audio> <video> Estratégias de carregamento para multimídia HTML introduzidas para tags como ou . | frame-src | 'eu' | Política de carregamento para frames. | Sandbox | formas permitidas | Ative sandbox (semelhante à propriedade sandbox de um iframe) para o recurso solicitado. | Reporte-URI | /report-uri | Informe ao navegador para qual endereço enviar as informações do log caso o recurso solicitado não seja permitido pela política. Especial: Se você quiser que o navegador reporte apenas logs e não bloqueie nada, pode usar o cabeçalho Content-Security-Policy-Report-Only em vez disso. |
Vamos modificar o arquivo web.config do projeto para adicionar um cabeçalho de resposta personalizado da seguinte forma:
Reexecute o projeto conforme mostrado abaixo:
O navegador bloqueou com sucesso o carregamento de scripts js de terceiros:
Recusaram-se a carregar o script 'https://hm.baidu.com/hm.js?6dbaac17dfeb2840b5b09d2dff6d2319' porque ele viola a seguinte diretriz de Política de Segurança de Conteúdo: "script-src 'self' http://localhost:56888/ ". Note que 'script-src-elem' não foi explicitamente definido, então 'script-src' é usado como plano B. (Fim)
|