Como Prevenir Ataques de Hackers no Seu Website

XSS Ataques são mais comuns do que se imagina. No vídeo legendado abaixo meu colega Abdi Gulaid explica de uma forma bem simplória mas coerente como ataques são feitos, quais são os tipos mais comuns e como escrever códigos seguros para prevenir vulnerabilidades.


This text will be replaced



Segue abaixo a íntegra das legendas do vídeo acima

1
00:00:19,193 --> 00:00:22,220
XSS Explicado e Demonstrado

2
00:00:22,221 --> 00:00:28,932
Olá, eu sou Abdi Gulaid, um experiente webmaster do bestcoder.co.uk

3
00:00:28,932 --> 00:00:31,986
eu desenvolvi esse vídeo para explicar,

4
00:00:31,987 --> 00:00:36,349
demonstrar e mostrar-lho como previnir-se contra ataques XSS

5
00:00:36,350 --> 00:00:38,491
quando estiver criando websites

6
00:00:38,492 --> 00:00:41,998
se você um webmaster experiente ou novato

7
00:00:41,999 --> 00:00:45,001
e gostaria de aprender como fazer o site de seu cliente mais seguro

8
00:00:45,002 --> 00:00:47,752
então esse vídeo tutorial é pra você

9
00:00:47,753 --> 00:00:52,437
esse vídeo será o mais claro e conciso possível

10
00:00:52,438 --> 00:00:54,727
para facilitar o seu aprendizado

11
00:00:54,728 --> 00:00:59,318
nesse tutorial aprenderemos o que é XSS Ataque

12
00:00:59,319 --> 00:01:03,288
e em seguida irei criar uma site de simulação

13
00:01:03,289 --> 00:01:07,772
para usarmos como cobaia para o nosso ataque

14
00:01:07,772 --> 00:01:13,144
uma vez que fizermos o ataque, ai iremos ver como previnir contra eles

15
00:01:13,145 --> 00:01:16,706
Então, o que é XSS você pergunta

16
00:01:16,707 --> 00:01:20,036
XSS é uma sigla para Cross-Site Scripting

17
00:01:20,037 --> 00:01:23,889
XSS é uma vulnerabilidade de segurança

18
00:01:23,890 --> 00:01:26,801
que pode ser encontrada em web aplicações mal desenvolvidas

19
00:01:26,802 --> 00:01:31,487
que permite pessoas mal intensionadas à injetarem client-side scripts,

20
00:01:31,487 --> 00:01:35,113
tais como JavaScript, na página da aplicação

21
00:01:35,114 --> 00:01:37,596
XSS ataques é muito comum

22
00:01:37,597 --> 00:01:41,995
e foi responsável por 70% de todos os ataques em 2007

23
00:01:41,996 --> 00:01:45,007
de acordo com estatísticas publicadas pela Symantic

24
00:01:45,008 --> 00:01:49,927
XSS ataques existe desde o nascimento da internet

25
00:01:49,928 --> 00:01:54,404
e grandes corporações tem sido imunes à XSS ataques

26
00:01:54,405 --> 00:02:00,175
empresas que foram alvos incluem

27
00:02:00,176 --> 00:02:07,344
Google, Yahoo, Facebook e Twitter

28
00:02:07,345 --> 00:02:10,527
previnir que seus clientes sejam alvos é algo

29
00:02:10,528 --> 00:02:13,360
super importante durante o processo de desenvolvimento

30
00:02:13,361 --> 00:02:16,616
e esse é o mas provável tipo de ataque que

31
00:02:16,617 --> 00:02:19,066
um hacker vai tentar contra um website

32
00:02:19,067 --> 00:02:23,210
Bons profissionais devem entender a importância disto

33
00:02:23,211 --> 00:02:28,390
pra demonstrar um XSS, eu irei agora criar uma pequena aplicação web

34
00:02:28,391 --> 00:02:31,009
essa será uma página de artigos bem simples

35
00:02:31,010 --> 00:02:33,521
a qual permitirá que pessoas deixem comentários

36
00:02:33,522 --> 00:02:37,251
e a escreverei em PHP, pois este é a linguagem mais usada na Web

37
00:02:37,252 --> 00:02:40,754
e MYSQL como banco de dados para salvar os comentários

38
00:06:18,598 --> 00:06:23,050
pronto! nossa pequena aplicação está pronta

39
00:06:23,051 --> 00:06:26,411
antes que eu possa demonstrar como um XSS ataque funciona

40
00:06:26,412 --> 00:06:28,848
e como prevenir contra um

41
00:06:28,849 --> 00:06:32,092
deixe me explicar os dois tipos de XSS ataques

42
00:06:32,093 --> 00:06:35,561
XSS ataques tem duas variantes

43
00:06:35,562 --> 00:06:37,876
a primeira é a "Não Pesistente"

44
00:06:37,877 --> 00:06:39,841
a qual é a mais comum

45
00:06:39,842 --> 00:06:44,121
o código malicioso é injetado diratamente na URL do site

46
00:06:44,122 --> 00:06:49,455
e o hacker precisará que alguém explicitamente use a URL comprometida

47
00:06:49,456 --> 00:06:51,440
para que o ataque prossiga

48
00:06:51,441 --> 00:06:56,248
a URL é normalmente distribuida por email

49
00:06:56,249 --> 00:06:58,943
ou outras formas para colocar o ataque em ação

50
00:06:58,944 --> 00:07:01,527
e a segunda variante é a "Persitente"

51
00:07:01,528 --> 00:07:05,067
essa é menos comum mas muito mais perigosa

52
00:07:05,068 --> 00:07:08,746
o código malicioso é injetado de forma permanente na página

53
00:07:08,747 --> 00:07:13,359
o qual roda repedidamente a cada visita que a página tenha

54
00:07:13,360 --> 00:07:19,397
ok, agora vamos ver como é feito um ataque "Não Persistente"

55
00:07:19,398 --> 00:07:26,970
como disse agora a pouco, essa forma de ataque consiste na injeção

56
00:07:26,971 --> 00:07:28,544
de código na URL da página

57
00:07:28,545 --> 00:07:33,222
essa aplicação está intencionalmente vulnerável a esse tipo de ataque

58
00:07:33,223 --> 00:07:35,375
para que eu possa lhe mostrar como o ataque é feito

59
00:07:35,376 --> 00:07:40,254
como demonstração, eu irei inserir um alerta em JavaScript

60
00:07:40,255 --> 00:07:42,069
à URL da página

61
00:07:42,070 --> 00:07:46,560
nossa aplicação usa o método GET para receber os dados da URL

62
00:07:46,561 --> 00:07:58,111
assim, tudo que estiver depois do sinal de igual será impresso pelo PHP script

63
00:08:24,842 --> 00:08:27,255
agora eu irei acessar esse link compremetido

64
00:08:27,256 --> 00:08:31,082
e nosso alerta em JavaScript deve ser executado logo após a página carregar

65
00:08:31,083 --> 00:08:35,348
como você pode ver, o JavaScript que colocamos na URL

66
00:08:35,349 --> 00:08:37,120
foi executada

67
00:08:37,121 --> 00:08:40,844
esse foi um XSS ataque bem sucedido

68
00:08:40,845 --> 00:08:44,220
um alerta não causará nenhum mal

69
00:08:44,221 --> 00:08:47,832
mas um hacker geralmente injetará um código

70
00:08:47,833 --> 00:08:50,148
que fará o download de um script em um arquivo externo

71
00:08:50,149 --> 00:08:51,973
o qual fará muito mais estragos

72
00:08:51,974 --> 00:08:57,017
tais como roubar informações de cookies

73
00:08:57,018 --> 00:09:00,499
ou mesmo informações sensíveis guardadas no site

74
00:09:00,500 --> 00:09:03,748
como esse é um ataque "Não Persistente"

75
00:09:03,749 --> 00:09:07,635
o hacker terá distribuir a URL

76
00:09:07,636 --> 00:09:10,147
pra fazer com que as pessoas acessem o link compremetido

77
00:09:10,148 --> 00:09:12,218
e assim iniciar o ataque

78
00:09:12,219 --> 00:09:16,537
ok, esse foi uma demonstração de ataque "Não Persistente"

79
00:09:16,538 --> 00:09:21,330
agora vamos ver a variante "Persistente"

80
00:09:21,331 --> 00:09:25,837
eu fiz a aplicação suceptivel a esse tipo de ataque na área de comentários

81
00:09:25,838 --> 00:09:30,194
novamente, iremos injetar um simples alerta em JavaScript

82
00:09:30,195 --> 00:09:32,913
no comentário para vermos como o ataque é feito

83
00:10:06,528 --> 00:10:10,225
como você pode ver, o nosso script foi executado

84
00:10:10,226 --> 00:10:12,806
e podemos agora ver o alerta

85
00:10:12,807 --> 00:10:16,500
esse tipo de ataque é diferente

86
00:10:16,501 --> 00:10:19,943
pois o script malicioso foi salvo no banco de dados de forma permanente

87
00:10:19,944 --> 00:10:24,336
e assim será executado cada vez que essa página for visitada

88
00:10:24,337 --> 00:10:27,839
enquanto o script for deixado no banco de dados

89
00:10:27,840 --> 00:10:31,703
novamente, um alerta não causa nenhum mal

90
00:10:31,704 --> 00:10:37,535
mas um hacker geralmente injetará um código que fará o download de um script em um arquivo externo

91
00:10:37,536 --> 00:10:39,772
o qual fará muito mais estragos

92
00:10:39,773 --> 00:10:42,644
esses foram os dois tipos de ataques demonstrados

93
00:10:42,645 --> 00:10:47,154
agora vamos ver como prevenir-se contra eles

94
00:10:47,155 --> 00:10:51,042
sempre valide entrada de dados vindas de usuários

95
00:10:51,043 --> 00:10:53,859
nunca confie em dados submetido por usuários

96
00:10:53,860 --> 00:10:57,915
se você tá esperando números, faça a validação para aceita apenas números

97
00:10:57,916 --> 00:11:03,809
ou seja, não aceite dados que não é de acordo com o tipo esperado

98
00:11:03,810 --> 00:11:08,063
sempre faça a sanitização dos dados entrados

99
00:11:08,064 --> 00:11:10,487
antes de salva-los no banco de dados

100
00:11:10,488 --> 00:11:13,927
e sempre faça a sanitização das variáveis $_GET

101
00:11:13,928 --> 00:11:15,677
antes de executar uma query

102
00:11:15,678 --> 00:11:18,271
ou imprimi-los na tela

103
00:11:18,272 --> 00:11:22,186
vou demonstrar agora como fazer isso na nossa aplicação de simulação

104
00:11:22,187 --> 00:11:27,822
a variável $_GET está no momento sendo impressa sem nenhuma higienização

105
00:11:27,823 --> 00:11:32,843
e qualquer código injetado será executado pelo navegador

106
00:11:32,844 --> 00:11:36,392
já sabemos o quanto isso é perigoso

107
00:11:36,393 --> 00:11:41,161
felizmente PHP já vem com algumas funções nativas

108
00:11:41,162 --> 00:11:44,015
que podem ser usadas para higienizar dados

109
00:11:44,016 --> 00:11:47,471
htmlentities() é uma delas

110
00:11:47,472 --> 00:11:51,897
eu usarei essa função para converter todos os caracteres especiais submetidos

111
00:11:51,898 --> 00:11:53,768
em seus respectivos HTML equivalentes

112
00:11:53,769 --> 00:12:02,044
eu encapsalarei a nossa variável $_GET dentro da função htmlentities

113
00:12:07,681 --> 00:12:09,797
pronto!

114
00:12:09,798 --> 00:12:15,420
vamos acessar o link compremetido novamente pra ver se código foi higienizado

115
00:12:21,894 --> 00:12:26,475
ótimo, como você pode ver o ataque falhou

116
00:12:26,476 --> 00:12:29,907
a higienização foi bem sucessida

117
00:12:29,908 --> 00:12:33,421
vamos olhar o código fonte para ver como isso foi feito

118
00:12:33,422 --> 00:12:39,307
podemos ver que quase todos os caracteres especiais

119
00:12:39,308 --> 00:12:42,483
foram convertidos em entidades HTML

120
00:12:42,484 --> 00:12:46,625
assim impedir que o script injetado não seja executado

121
00:12:46,626 --> 00:12:53,813
ok, vamos ver agora como prevenir o ataque "Persistente"

122
00:12:53,814 --> 00:12:55,429
em nossa área de comentários

123
00:12:55,430 --> 00:13:03,520
como podemos ver, o código PHP não faz a higienização dos dados a serem salvos

124
00:13:03,521 --> 00:13:10,713
eu irei simplesmente encapsular as variáveis 'name' e 'comment' dentro da função htmlentities

125
00:13:10,714 --> 00:13:15,116
para que os dados sejam higienizados antes de serem salvos no banco de dados

126
00:13:26,620 --> 00:13:34,405
pronto, vamos ver agora se o ataque na área de comentários irá funcionar

127
00:14:05,635 --> 00:14:11,309
como podemos ver, o código injetado não foi executado

128
00:14:11,310 --> 00:14:15,181
e de fato o código foi higienizado

129
00:14:15,182 --> 00:14:21,123
vamos olhar o código fonte e ver a parte do comentário

130
00:14:25,683 --> 00:14:33,085
a função htmlentities converteu todos os caracteres especiais em suas respectivos entidades

131
00:14:33,086 --> 00:14:36,077
isso é exatamente o que queremos

132
00:14:36,078 --> 00:14:41,301
e como resultado, o XSS ataque falhou

133
00:14:41,302 --> 00:14:45,022
esse foi XSS explicado e demonstrado

134
00:14:45,023 --> 00:14:49,651
você agora está preparado para prevenir um ataque XSS

135
00:14:49,652 --> 00:14:52,379
e assim deixar os sites de seus clientes mais seguros

136
00:14:52,380 --> 00:14:57,471
Obrigado por assistir

  • Compartilhe:

  • RSS
  • -->
  • Digg this
  • Face book
  • Bookmark and Share

0 comentário(s)

Postar um comentário-

Postar um comentário

Comentaristas-

BlogBlogs