seguranca em app rails

39
@danielvlopes Daniel Lopes

Upload: daniel-lopes

Post on 18-May-2015

1.048 views

Category:

Technology


2 download

DESCRIPTION

Apresentação feita no Café Ágil 2011 BH sobre segurança em aplicativos web com foco especial em Ruby on Rails.

TRANSCRIPT

Page 1: Seguranca em APP Rails

@danielvlopes

Daniel Lopes

Page 2: Seguranca em APP Rails

SEGURANÇA & RAILS

Page 3: Seguranca em APP Rails

http://objetiva.co/

Page 4: Seguranca em APP Rails
Page 5: Seguranca em APP Rails

voltando . . .

Page 6: Seguranca em APP Rails

Segurança

Page 7: Seguranca em APP Rails
Page 8: Seguranca em APP Rails
Page 9: Seguranca em APP Rails

Instituto Gartner

O alvo é ...

App75%

Host25%

Page 10: Seguranca em APP Rails

WEB APP

Page 11: Seguranca em APP Rails
Page 12: Seguranca em APP Rails
Page 13: Seguranca em APP Rails

XSS

CSRF

Parâmetros

SQL INJECTION

Mass Assign

Logs

Arquivos

Session

Page 14: Seguranca em APP Rails

Cobaia

Page 15: Seguranca em APP Rails
Page 16: Seguranca em APP Rails

MassAssignment

Page 17: Seguranca em APP Rails

LIVE CODING

Page 18: Seguranca em APP Rails

SQL INJECTION

Page 19: Seguranca em APP Rails

LIVE CODING

Page 20: Seguranca em APP Rails

XSSCross Site Scripting

Page 21: Seguranca em APP Rails

LIVE CODING

Page 22: Seguranca em APP Rails

CSRFCross s. ref. forgery

Page 23: Seguranca em APP Rails

LIVE CODING

Page 24: Seguranca em APP Rails

Files (download / upload)

Page 25: Seguranca em APP Rails

class Asset < ActiveRecord::Base validates_presence_of :title has_attached_file :document, :styles => { :medium => "300x300#", :thumb => "50x50#" } validates_attachment_size :document, :less_than => 5.megabyte validates_attachment_presence :document default_scope :order => "created_at DESC" end

Page 26: Seguranca em APP Rails

class Asset < ActiveRecord::Base validates_presence_of :title

has_attached_file :document, :path => ":rails_root/uploads/:attachment/:id/:style/:style.:extension", :styles => { :medium => "300x300#", :thumb => "50x50#" }

has_attached_file :document, , :whiny => false

validates_attachment_size :document, :less_than => 5.megabyte validates_attachment_presence :document validates_attachment_content_type :document, :content_type => %w(image/jpeg image/pjpeg image/gif image/png)

default_scope :order => "created_at DESC"

end

Page 27: Seguranca em APP Rails

send_file('/var/www/uploads/' + params[:filename])

../../../etc/passwd

Page 28: Seguranca em APP Rails

BRUTE FORCE

Page 29: Seguranca em APP Rails

Devise.setup do |config| config.mailer_sender = "[email protected]"

require 'devise/orm/active_record'

config.encryptor = :bcrypt config.pepper = "e3b0100c8c0ef8a7f09f104de3d2827f..."

config.timeout_in = 10.minutes

config.lock_strategy = :failed_attempts config.maximum_attempts = 20 config.unlock_strategy = :both # email and time config.unlock_in = 1.hourend

Devise

Page 30: Seguranca em APP Rails

SpamsLog FilteringParâmetros

Page 31: Seguranca em APP Rails

gem 'reverse_captcha'

class Comment < ActiveRecord::Base captcha :nicknameend

<%= form_for @comment do |f| %> ... <%= f.captcha %><% end %>

Spam

gem 'recaptcha'gem 'captcha'

Page 32: Seguranca em APP Rails

require File.expand_path('../boot', __FILE__)

require 'rails/all'

Bundler.require(:default, Rails.env) if defined?(Bundler)

module Producer class Application < Rails::Application config.autoload_paths += %W(#{config.root}/app/sweepers) config.i18n.default_locale = "pt-BR" config.encoding = "utf-8"

config.filter_parameters += [:password, :credit_card, :cnpj, :cpf] ... endend

Log Filter

Page 33: Seguranca em APP Rails

@project = Project.find(params[:id])

Parâmetros

@project = current_user.projects.find(params[:id])

Page 34: Seguranca em APP Rails

Mass Assign.

Parâmetros

☐☐

SQL Inject.☐XSS☐CSRF☐File System☐

Brute Force☐Spams☐Log☐Session☐

Page 35: Seguranca em APP Rails

Mass Assign.

Parâmetros

SQL Inject.

XSS

CSRF

File System

Brute Force

Spams

Log

☑☑☑☑☑

☑☑☑

Page 36: Seguranca em APP Rails
Page 39: Seguranca em APP Rails

slides: http://objetiva.co/publications