39
@danielvlopes Daniel Lopes

Seguranca em APP Rails

Embed Size (px)

DESCRIPTION

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

Citation preview

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