Dica de como se proteger de hackers, utilizando o Angular 2

Clayton K. N. Passos
codigorefinado
Published in
3 min readNov 26, 2016

Como o Angular 2 te protege de ataques de XSS (Cross-site Scripting)

Por: Clayton K. N. Passos, especialista em desenvolvimento de software, gerenciamento de projetos, Green belt…

Introdução

Cross-site Scripting ou XSS é provavelmente a vulnerabilidade de segurança mais comum. Este tipo de ataque, permite que seja possível injetar scripts no client-side de páginas web. Caso queira saber mais como funcionam estes ataques, você pode acessar este excelente artigo: http://excess-xss.com/, que explica detalhadamente como poderiamos por exemplo capturar os cookies.

Como o Angular 2 nos protege de ataques XSS?

Por padrão, o Angular 2 trata todos os valores como inseguros, ou não confiáveis. Quando um valor é inserido no DOM, via propriedade, atributo, estilo, classe de ligação (class binding), ou interpolação, o Angular desinfeta e escapa valores (escape untrusted) não confiáveis.

A higienização modifica os valores que serão inseridos no DOM, e como isto ocorrerá depende do contexto.

Por exemplo quando nós tentamos fazer isto:

@Component({
selector: ‘my-app’,
template: `
<div [innerHtml]=”html”></div>
`,
})
export class App {
constructor() {
this.html = “<h1>DomSanitizer</h1><script>attackerCode()</script>”
}
}

Por debaixo dos panos, o Angular limpa o HTML de possíveis códigos inseguros, neste caso um possível script malicioso não irá carregar.

Outro exemplo, se você tentar fazer o bind da propriedade src em um iframe, ou um vídeo, irá obter o seguinte erro:

“unsafe value used in a resource URL context”

@Component({
selector: ‘my-app’,
template: `
<iframe [src]=”iframe”></iframe>
`,
})
export class App {
constructor() {
this.iframe = “https://www.google.com";
}
}

Angular lança este erro porque o atributo src da tag iframe é um recurso que está em um contexto seguro, um código inseguro pode, por exemplo, realizar inadvertidamente um download de arquivo sem suspeitas do usuário.

A Proteção do Angular

Nós podemos utilizar os um dos métodos bypass do serviço DomSanitizer para proteger os valores de um caso em particular.

No exemplo abaixo, injetamos o serviço DomSanitizer e executamos o método bypassSecurityTrustHtml, desta maneira passamos HTML seguro a tag div.

import {BrowserModule, DomSanitizer} from ‘@angular/platform-browser’

@Component({
selector: ‘my-app’,
template: `
<div [innerHtml]=”html”></div>
`,
})
export class App {
constructor(private sanitizer: DomSanitizer) {
this.html = sanitizer.bypassSecurityTrustHtml(‘<h1>DomSanitizer</h1><script>ourSafeCode()</script>’) ;
}
}

O próximos exemplo, mostra como passar para a tag iframe um valor seguro ao atributo src. Neste utilizamos o método bypassSecurityTrustResourceUrl

@Component({
selector: ‘my-app’,
template: `
<iframe [src]=”iframe”></iframe>
`,
})
export class App {
constructor(private sanitizer: DomSanitizer) {
this.iframe = sanitizer.bypassSecurityTrustResourceUrl(“https://www.google.com")
}
}

Agora, no próximo exemplo é mostrado como podemos higienizar manualmente o código, para isto é necessário informar o contexto que pode ser um de:

  • SecurityContext.NONE
  • SecurityContext.HTML
  • SecurityContext.STYLE
  • SecurityContext.SCRIPT
  • SecurityContext.URL
  • SecurityContext.RESOURCE_URL

import {Component, SecurityContext} from ‘@angular/core’
export class App {
constructor(private sanitizer: DomSanitizer) {
this.html = sanitizer.sanitize(SecurityContext.HTML, “<h1>Sanitize</h1><script>attackerCode()</script>”);
}
}

Mais conhecimento como este, está ao seu alance no meu Curso de Angular

Referências:

  1. http://excess-xss.com/
  2. https://angular.io/docs/ts/latest/guide/security.html
  3. https://medium.com/@NetanelBasal/angular-2-security-the-domsanitizer-service-2202c83bd90#.83ie3lyfl

--

--