JavaFree.org | RubyOnBr.org

Artigo novo "Fazendo a segurança de seus IDs"

Acompanhar Artigo novo "Fazendo a segurança de seus IDs" 4 posts, 3 participantes

Avatar Ronie Uliana 891 posts

http://rubyonbr.org/articles/2006/12/07/fazendo-a-segurana-de-seus-ids/

Acabei de liberar mais um artigo. Ele fala sobre uma das formas de ataque mais simples de se fazer e como evitar ele no Rails.

 
440002948_b8dc8436b4 Marcelo Júnior 811 posts

Cara, nas versões seguras, tem a seguinte linha:


@post = Post.find_by_id_and_author_id(params[:id], session[:user][:id])

Bem, eu não entendi esse trecho:

session[:user][:id]

 
Avatar Adriano Dadario 229 posts

Este trecho diz que você colocou o usuário autenticado na sessão.

Então quando você precisa saber quem está logado você consulta a sessão conforme colocado.

session[:user] retorna um objeto (Model) User, depois você pode pegar a ID dele user.id.

Bom… A versão acima diz que seu usuário na sessão é um Hash, mas geralmente você coloca um model, então seria melhor ficar:

post = Post.find_by_id_and_author_id(params[:id], session[:user].id)

:)

 
Avatar Ronie Uliana 891 posts

É… tem um ponto negativo em colocar o Model na sessão. Ele normalmente tem variáveis apontando pra estrutura de persistência (via ActiveRecord::Base), então, enquanto ele estiver na sessão, esses objetos, e todos os objetos relacionados, não podem der coletados pelo Garbage Collector.

Não faço idéia se o Rails chega a matar esses objetos, se eles são singletons ou que raio realmente acontece com eles. Mas, por via das dúvidas, o legal é manter apenas objetos “magros” na session, que não tenham referências a nada no sistema além deles mesmos. Hashes, nesse ponto, são ótimos, mas você também pode usar Structs ou valores simples.