论坛首页 编程语言技术论坛

安全性問題提報

浏览 3260 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-03-09  
RoR 的 params[:table_name] 用來創建新資料非常簡單, 且簡潔

但是很容易被假表單修改原本不該被開放的資料

當我們用 model.create( HASH ) 或是 model.update_attributes( HASH ) 的時候

被使用者做偽造的表單修改了原本我們沒有開放的欄位修改

http://manuals.rubyonrails.com/read/chapter/47 <-- 官方網站中有一個 solution 可以解決這個問題
在 model 中加上保護的欄位名, 可以防止當我們依賴 params[:table_name] 欄位來建立資料表時, 被惡意的
使用者修改掉需要被保護的欄位

attr_protected :approved, :role

不才小弟偷偷在 JavaEye 做了這個測試, 希望站長回復一下我的 username

   发表时间:2007-03-10  
<h1>abyssband</h1> 写道
RoR 的 params[:table_name] 用來創建新資料非常簡單, 且簡潔

但是很容易被假表單修改原本不該被開放的資料

當我們用 model.create( HASH ) 或是 model.update_attributes( HASH ) 的時候

被使用者做偽造的表單修改了原本我們沒有開放的欄位修改

http://manuals.rubyonrails.com/read/chapter/47 <-- 官方網站中有一個 solution 可以解決這個問題
在 model 中加上保護的欄位名, 可以防止當我們依賴 params[:table_name] 欄位來建立資料表時, 被惡意的
使用者修改掉需要被保護的欄位

attr_protected :approved, :role

不才小弟偷偷在 JavaEye 做了這個測試, 希望站長回復一下我的 username



这个安全隐患我心里一直清楚,不过一直幻想大家不知道。唉~还是被人发现了。改起来比较麻烦,所有的model都要加attr_accessible来确保只暴露可修改的字段。attr_protected还不够安全,就是这个改动涉及影响面太大,所以一直拖着,这个周末争取改掉。
0 请登录后投票
   发表时间:2007-03-10  
robbin 写道

这个安全隐患我心里一直清楚,不过一直幻想大家不知道。唉~还是被人发现了。改起来比较麻烦,所有的model都要加attr_accessible来确保只暴露可修改的字段。attr_protected还不够安全,就是这个改动涉及影响面太大,所以一直拖着,这个周末争取改掉。


請教一下 robbin 大大, 如果用 attr_protected 還會有那些安全上的隱憂呢?

因為我測試過後, 發現一些想偷懶利用 params 對 model 寫入的項目通常沒有太多需要檢查的地方

唯一想要防止的是預期外的寫入

另外小弟想再請教一個問題, 為什麼 strip_tags 這個 function 沒有定義在 ActionController 的 scope 中呢

難到在 controller 中不太需要用到 strip_tags 這種過濾字串的函式嗎?

如果小弟在必要的時後, 可不可以對 Params Hash 中 element 做一次過濾, 不知道效能損耗會不會太大

EX:

params[:user].each do |k,v|
   params[:user][k] = strip_tags(v) if v.class == String
end

請問這樣的一段代碼, 在 ruby 中執行起來會不會很吃重...

小弟是 ruby 初學者, 對 ruby 還不太熟, 望請 robbin 兄多多指教
0 请登录后投票
   发表时间:2007-03-10  
像rich editor之类,还是允许你保存html text的,只不过在显示出来的时候才过滤,我想这是为什么在ActionView里面提供的原因吧。

不会影响性能
0 请登录后投票
   发表时间:2007-03-10  
white_list 可以一用
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics