SlideShare a Scribd company logo
1 of 45
Download to read offline
Seguridad web en
aplicaciones Rails
    Ernesto Jiménez Caballero
 ernesto.jimenez@negonation.com
Sobre esta charla
¿De qué vamos a hablar?
SQL Injections
SQL Injections
class User < ActiveRecord::Base
  def self.authenticate(login, password)
    return User.find(:first, :conditions => quot;login = '#{login}' AND 
crypted_password = '#{encrypt(password)}'quot;)
  end
end

User.authenticate(quot;blabla' OR 'x' = 'x') OR ('x' = 'xquot;, 'lo_que_sea')
# => SELECT * FROM users WHERE 
      (login = 'blabla' OR 'x' = 'x') OR
      ('x' = 'x' AND crypted_password = '4123oijsjdir32josidjr032')
      LIMIT 1;

User.authenticate(quot;blabla' OR admin = 1) OR ('x' = 'xquot;, 'lo_que_sea')
# => SELECT * FROM users WHERE
      (login = 'blabla' OR admin = 1) OR
      ('x' = 'x' AND crypted_password = '4123oijsjdir32josidjr032')
      LIMIT 1;
SQL Injections
class User < ActiveRecord::Base
  def self.authenticate(login, password)
    return User.find(:first, :conditions => [
      quot;login = ? AND crypted_password = ?quot;,
      login, encrypt(password)
    ])
  end
end

class User < ActiveRecord::Base
  def self.authenticate(login, password)
    return User.find(:first, :conditions => {
      :login => login, :crypted_password => encrypt(password)
    })
  end
end
:conditions => “x = #{x}”
deja que Rails escape los parámetros de las consultas
Asignación masiva
Asignación masiva
class UsersController < ApplicationController
  def create
    @user = User.create(params[:user])
  end
end

<% from_for :user, :url => users_path do |f| %>
  <label>email:
    <%= f.text_field :email %>
  </label>
  <label>password:
    <%= f.text_field :password %>
  </label>
  <%= submit_tag 'Registrarse' %>
<% end %>
Asignación masiva
class UsersController < ApplicationController
  def create
    @user = User.create(params[:user])
  end
end
Asignación masiva
class UsersController < ApplicationController
  def create
    @user = User.create(params[:user])
  end
end

post :create, :user => {
   :email => 'usuario@ejemplo.com',
   :password => 'xxxx'}
# => Usuario creado con los parámetros del formulario

post :create, :user => {
   :email => 'usuario@ejemplo.com', 
   :password => 'xxxx',
   :admin => true}
# => Escalada de privilegios!
Asignación masiva
class User < ActiveRecord::Base
  has_many :posts
end

class Post < ActiveRecord::Base
  belongs_to :user
end

post :create, :user => {
   :email => 'usuario@ejemplo.com',
   :password => 'xxxx',
   :post_ids => [1,2,3]}
# => Se proclama autor de los posts 1, 2 y 3!
Asignación masiva
class User < ActiveRecord::Base
  attr_protected :admin
end

user = User.new(
  :email => 'usuario@ejemplo.com',
  :password => 'xxxx',
  :admin => true)
user.admin # => false
user.attributes = {
  :email => 'nuevo_email@ejemplo.com',
  :admin => true }
user.admin # => false

user.admin = true
user.admin # => true
Asignación masiva
class User < ActiveRecord::Base
  attr_accessible :email, :password
end

user = User.new(
  :email => 'usuario@ejemplo.com',
  :password => 'xxxx',
  :admin => true)
user.admin # => false
user.attributes = {
  :email => 'nuevo_email@ejemplo.com',
  :admin => true }
user.admin # => false

user.admin = true
user.admin # => true
attr_protected
    attr_accessible
no introduzcas vulnerabilidades por olvidos
Cross Site Scripting
Cross Site Scripting
<div class=quot;comentarioquot;>
  <%= @comment.body %>
</div>

post :create, :comment => { :body => quot;
<script>
  /* Javascript malintencionado */
</script>
quot; }
# => <div class=quot;commentquot;>
       <script>
         /* Javascript malintencionado */
       </script>
     </div>
Cross Site Scripting
<div class=quot;comentarioquot;>
  <%= sanitize @comment.body %>
</div>

post :create, :comment => { :body => quot;
<script>
  /* Javascript malintencionado */
</script>
quot; }
# => <div class=quot;commentquot;>
       &lt;script>
         /* Javascript malintencionado */
       &lt;/script>
     </div>
Cross Site Scripting
<div class=quot;comentarioquot;>
  <%=h @comment.body %>
</div>

post :create, :comment => { :body => quot;
<script>
  /* Javascript malintencionado */
</script>
quot; }
# => <div class=quot;commentquot;>
       &lt;script&gt;
         /* Javascript malintencionado */
       &lt;/script&gt;
     </div>
sanitize
Funciona con listas negras y no lo detecta todo
h
bueeeeno, pero... ¿qué pasa si te olvidas uno?
    ¡¡¡es muy fácil olvidarse una letra!!!
sanitiza antes de guardar
Cross Site Request Forgery
Cross Site Request Forgery
<img src=”http://web.com/nuevo_pass?pass=robado” />
Cross Site Request Forgery
 No es un problema en Rails 2.0
Accesos no autorizados
Accesos no autorizados
class DraftsController < ApplicationController
  def show
    @draft = Draft.find(params[:id])
  end

  def destroy
    @draft = Draft.destroy(params[:id])
  end
end

# => Cualquier usuario puede ver y eliminar los borradores
Accesos no autorizados
   class DraftsController < ApplicationController
     def show
       @draft = current_user.drafts.find(params[:id])
     end

     def destroy
       @draft = current_user.drafts.destroy(params[:id])
     end
   end

# => Solo el autor del borrador puede verlos y borrarlos
Acciones públicas
Acciones públicas
# Ejemplo muy chorra :)
class UsersController < ApplicationController
  def invite
    current_user.invitations.create(params[:email],)
    send_email
  end
  
  def send_email
    UserMailer.deliver_email(params[:email], params[:body])
  end
end

get :send_email,
    :email => 'cualquiera@spam.es',
    :body => 'Compra V14GR4! http://www.pastillitaazul.com'
# => El código de send_mail se ejecuta aunque luego de error
Acciones públicas
# Ejemplo muy chorra :)
class UsersController < ApplicationController
  def invite
    current_user.invitations.create(params[:email],)
    send_email
  end
  
protected
  def send_email
    UserMailer.deliver_email(params[:email], params[:body])
  end
end
algunos consejos
jamás te fíes de lo que recibes
        en el servidor
ten cuidado con los datos que
recibes, pero también con los
          que envías
controla las interfaces
de tus cotroladores y
      modelos
no filtres con listas negras
no tengas miedo de escribir
    tests que prueben la seguridad

  def test_should_avoid_xss_from_search_query
    get :search, :q => '<script id=quot;injectionquot;>alert();</script>'
    assert_no_tag :script, :attributes => {:id => 'injection' }
  end
algunas herramientas
FireBug
Cookie Editor
Tamper Data
CURL
WWW::Mechanize
require 'rubygems'
require 'mechanize'

agent = WWW::Mechanize.new

page = agent.get 'http://www.gmail.com'
form = page.forms.first
form.Email = '***your gmail account***'
form.Passwd = '***your password***'
page = agent.submit form

page = agent.get page.search(quot;//metaquot;).first.attributes['href'].gsub(/'/,'')
page = agent.get page.uri.to_s.sub(/?.*$/, quot;?ui=html&zy=nquot;)
page.search(quot;//tr[@bgcolor='#ffffff']quot;)  do |row|
  from, subject = *row.search(quot;//b/text()quot;)
  url = page.uri.to_s.sub(/ui.*$/, row.search(quot;//aquot;).first.attributes[quot;hrefquot;])
  puts quot;From: #{from}nSubject: #{subject}nLink: #{url}nnquot;

  email = agent.get url
  # ..
end
¿Preguntas?

More Related Content

Viewers also liked (11)

Carnaval2008
Carnaval2008Carnaval2008
Carnaval2008
 
El nostre estiu
El nostre estiuEl nostre estiu
El nostre estiu
 
Gabriela
GabrielaGabriela
Gabriela
 
Els nostres collages
Els nostres collagesEls nostres collages
Els nostres collages
 
Observant Picasso
Observant PicassoObservant Picasso
Observant Picasso
 
The use of Present perfect
The use of Present perfectThe use of Present perfect
The use of Present perfect
 
VIATGE FI CURS 4t ESO  LONDRES 2015
VIATGE FI CURS 4t ESO  LONDRES 2015VIATGE FI CURS 4t ESO  LONDRES 2015
VIATGE FI CURS 4t ESO  LONDRES 2015
 
Runescape Annoyances
Runescape AnnoyancesRunescape Annoyances
Runescape Annoyances
 
(One Page Oro 1)
(One Page Oro 1)(One Page Oro 1)
(One Page Oro 1)
 
(One Page Oro 1 E)
(One Page Oro 1 E)(One Page Oro 1 E)
(One Page Oro 1 E)
 
5 tips for your HTML5 games
5 tips for your HTML5 games5 tips for your HTML5 games
5 tips for your HTML5 games
 

Similar to Seguridad en aplicaciones Web

Mecanismos de protección contra inyección sql
Mecanismos de protección contra inyección sqlMecanismos de protección contra inyección sql
Mecanismos de protección contra inyección sql
Alejandra Toledano
 
Exploiting Web applications SQL Injection
Exploiting Web applications SQL InjectionExploiting Web applications SQL Injection
Exploiting Web applications SQL Injection
Conferencias FIST
 
Php y my sql con manejo de sesiones
Php y my sql con manejo de sesionesPhp y my sql con manejo de sesiones
Php y my sql con manejo de sesiones
capo1988
 
Consultar estado
Consultar estadoConsultar estado
Consultar estado
Lismirabal
 
Consultar estado
Consultar estadoConsultar estado
Consultar estado
Lismirabal
 

Similar to Seguridad en aplicaciones Web (15)

Examen 2° grado primer bimestre
Examen 2° grado primer bimestreExamen 2° grado primer bimestre
Examen 2° grado primer bimestre
 
Mecanismos de protección contra inyección sql
Mecanismos de protección contra inyección sqlMecanismos de protección contra inyección sql
Mecanismos de protección contra inyección sql
 
Wp config.php
Wp config.phpWp config.php
Wp config.php
 
Vulnerabilidades en aplicaciones web
Vulnerabilidades en aplicaciones webVulnerabilidades en aplicaciones web
Vulnerabilidades en aplicaciones web
 
Exploiting Web applications SQL Injection
Exploiting Web applications SQL InjectionExploiting Web applications SQL Injection
Exploiting Web applications SQL Injection
 
Eliminando SQL injection
Eliminando SQL injectionEliminando SQL injection
Eliminando SQL injection
 
Loguin
LoguinLoguin
Loguin
 
Jacqueline nuñez pacco
Jacqueline nuñez paccoJacqueline nuñez pacco
Jacqueline nuñez pacco
 
Jacqueline nuñez pacco
Jacqueline nuñez paccoJacqueline nuñez pacco
Jacqueline nuñez pacco
 
Asegúr@IT III - Ataques SQL Injection masivos
Asegúr@IT III - Ataques SQL Injection masivosAsegúr@IT III - Ataques SQL Injection masivos
Asegúr@IT III - Ataques SQL Injection masivos
 
Php y my sql con manejo de sesiones
Php y my sql con manejo de sesionesPhp y my sql con manejo de sesiones
Php y my sql con manejo de sesiones
 
Consultar estado
Consultar estadoConsultar estado
Consultar estado
 
Seguridad WEB - Principios básicos.
Seguridad WEB - Principios básicos.Seguridad WEB - Principios básicos.
Seguridad WEB - Principios básicos.
 
Consultar estado
Consultar estadoConsultar estado
Consultar estado
 
Julissa huaman hilari
Julissa huaman hilariJulissa huaman hilari
Julissa huaman hilari
 

Recently uploaded

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Recently uploaded (11)

Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 

Seguridad en aplicaciones Web