# views/frontpages/show.html.erb
<h3>Title</h3>
<%= render :partial => params[:page] || "home" %>
jadi isi dari page tersebut tergantung dari params page. yang jadi masalah ketika user memasukkan suatu url seperti
http://..../frontpages/show?page=%2fadmin%2fusers%2flist
(url dapat dengan mudah dicari menggunakan dictionary attack atau sejenisnya)
maka partial yang di-load akan berasal dari halaman di admin::users.
walaupun besar kemungkinan user tidak akan dapat melihat data di halaman tersebut karena akses tidak melalui controller, tetapi hal tersebut tetap tidak seharusnya diperbolehkan. apalagi terkadang dengan alasan 'malas' atau lainnya kita melakukan pengambilan data tidak di dalam controller tetapi langsung di view atau helper dimana data tersebut digunakan (ini salah satu alasan mengapa pengambilan data harus berada di controller bukan di view)
untuk mengatasi hal tersebut saia memproses params page td sebelum digunakan di view, misalkan:
# /controllers/frontpages_controller.rb
# ...
def show
@partial = (params[:page].blank? ||
params[:page].try('include?', '/')) ?
'home' : params[:page]
end
# ...
# views/frontpages/show.html.erb
<h3>Title</h3>
<%= render :partial => @partial %>
atau lebih baik lagi dengan tidak meng-implementasi partial seperti ini dan membuat action terpisah untuk setiap page.
yah situasi di atas mungkin merupakan hal bodoh yang seharusnya tidak terjadi selama kita mengikuti konvensi dari rails, tp ada kalanya karena berbagai alasan kita melanggar konvensi dan menggunakan implementasi kita sendiri, karenanya sebaiknya kita berpikir 1000x (lebay) sebelum melakukan hal itu.
oh ya directory traversal sendiri bukan hanya dapat digunakan pada situasi seperti di atas, tetapi banyak situasi lain yang bisa dimanfaatkan dengan directory traversal ini. karena itu, berhati-hatilah, inget kata bang napi (halah..)
ok segitu aja, tadinya mao nulis lanjutan dari svn branching tapi ditunda buat next post ^_^