O documento fornece dicas de segurança para evitar ameaças comuns na web, como roubo de sessão, injeção de SQL e XSS. Ele discute vulnerabilidades como armazenamento inseguro de sessões e uploads de arquivos, e fornece contramedidas como configurar SSL, validar parâmetros e usar bibliotecas como Devise e Pundit.
3. • Segundo a PwC, os ataques no Brasil cresceram 274%,
enquanto no resto do mundo apenas 38%;
• Segundo o Gartner, 75% dos ataques são na camada de
aplicação da web;
• E 97% dos sites auditados possuem vulnerabilidades.
Introdução
5. • Sessões armazenam dados específicos do
usuário.
• HTTP é stateless, sem sessões seria necessário
se autenticar em todas as requisições
• Em geral sessões são compostas por um
SessionId(32 char SecureRandom.hex) e um Hash
Sessions
6. • Sniffer na rede local;
• config.force_ssl = true
• Logout da aplicação
• Scripts XSS
• Fixar o identificador da sessão
Session Hijacking
8. • Dificilmente um site
possui essa vulnerabilidade
• A vulnerabilidade pode
ser exposta caso os verbos
http sejam usados de
maneira incorreta
Cross-Site Request Forgery
9. • User os verbos corretamente
• Rails usa um campo escondido _method para compensar os browsers que
aceitam apenas GET e POST
• Utilizar “protect_from_forgery with: :exception”, assim o
rails inclui um token de segurança nos forms e requests
ajax
• Rails por default adiciona um header chamado X-
CSRF-Token em todas requisições diferentes de GET -
<%= csrf_meta_tags %>
Cross-Site Request Forgery
10. • Cuidado redobrado com métodos que fazem
redirecionamento para outra url
• O atacante pode utilizar algo como “http://
www.site.com/site/reload?xy=1&url=www.attacker.com“
• Uma dica para evitar esse tipo de ataque é aceite
apenas os parâmetros esperados e verifique o
direcionamento com uma whitelist
Redirection
11. • Dê permissão para a aplicação escrever arquivos
apenas em pastas inofensivas.
• Se você armazena arquivos na pasta /var/www/uploads
• aplicação tem permissão para escrever em qualquer pasta
• ../../../etc/passwd
• Faça a sanitização do nome do arquivo, remova o
que não for alpha numérico
• Processe upload de arquivos de maneira assíncrona
File Uploads
12. • Dê permissão para a aplicação escrever arquivos
apenas em pastas inofensivas.
• Se você armazena arquivos na pasta /var/www/uploads
• aplicação tem permissão para escrever em qualquer pasta
• ../../../etc/passwd
• Faça a sanitização do nome do arquivo, remova o
que não for alpha numérico
• Processe upload de arquivos de maneira assíncrona
File Uploads
13. • Arquivos de código podem ser executados quando
baixados
• Não faça uploads na pasta root do apache
• Não use o método send_file sem filtros
• Recomenda-se armazenar o nome do arquivo em
banco de dados e renomear o arquivo em disco
File Downloads
14. • Login por força bruta
• Account Hijacking - Cuidados especiais na hora de
trocar senha e e-mail
• Não coloque passwords nos logs!
• config.filter_parameters << :password
User Management
15. • Acesso não autorizado a funções
• http://floripaonrails.com/event/1
• @event = Event.find(params[:id])
• @event = @current_user.events.find(params[:id])
User Management
18. • Use before_action except: [...] ao invés de only: [...]
para ações de segurança
• authenticate_user por exemplo
• Utilize strong parameters
• Não tente corrigir entradas inesperadas ou mal
formadas, rejeite!
Injection
19. • Utilize o config/secrets.yml para armazenar senhas
• Configure os HTTP headers do rails para garantir a
segurança da sua aplicação
• config/application.rb
• config.action_dispatch.default_headers = {
'X-Frame-Options' => 'SAMEORIGIN',
'X-XSS-Protection' => '1; mode=block',
'X-Content-Type-Options' => 'nosniff'
}
Outras dicas