HTTP Redirect 和 URL Fragments

最近在改 javascript 程式碼, 才注意到各家瀏覽器對 HTTP Redirect + URL Fragments 的行為不一樣.

規格書沒有規定瀏覽器要把 hash 的部份傳回伺服器 , 所以我們無法在 server 端接收到 http://foo/#photo/bar , 就直接在 Location 裡轉成 http://foo/photo/#bar , 因為伺服器端可能只收到 http://foo/ . 這是題外話, 今天的重點不是這個.

今天討論的狀況比較簡單, 當使用者到 http://foo/#photo/id , 希望重導到某網頁, 所以伺服器端回應 HTTP 302 FOUND , 且 Location 欄位裡填上 http://foo/bar/ 或是 http://foo/bar/#picture 時, 各家瀏覽器的行為不一樣. Continue reading ‘HTTP Redirect 和 URL Fragments’

jQuery XSS with $(location.hash)

從 twitter 上看到 new XSS pattern with jQuery ,

http://ma.la/jquery_xss/#<img src=/ onerror=alert(1)>

原因是 jQuery 對以下三種狀況的處理:

  1. $("#id") 是個 css selector
  2. $("") 是 createElement
  3. $("#") 也是 createElement

所以如果直接使用 $(location.hash) , 而 location.hash"#<img onerror=.....>" 的話, 就出意外啦.

$(location.hash) 哪裡會用呢? 像是用 ajax 做多頁啦, tab 啦… 像是 jQuery mobile 就中獎了 XDXD

安裝 Redmine 1.1.1 遇到 version_requirements 的暫時解法

裝 redmine 1.1.1 會遇到

undefined local variable or method `version_requirements' for #<Rails::GemDependency:0x9031db8>

幾種解法:

  1. 將 gem 換回 1.4.2
    $ gem install rubygems-update -v='1.4.2'
    $ gem uninstall rubygems-update -v='1.5.0'
    $ update_rubygems
    
  2. 使用更新的 redmine , 例如 trunk 版本
  3. 在 config/environment.rb 中, engines 之後, Initializer 之前加入
    begin
      require File.join(File.dirname(__FILE__), '../vendor/plugins/engines/boot')
    rescue LoadError
    # Not available
    end
    
    # 加入這段
    if Gem::VERSION &gt;= "1.3.6" 
        module Rails
            class GemDependency
                def requirement
                    r = super
                    (r == Gem::Requirement.default) ? nil : r
                end
            end
        end
    end
    
    Rails::Initializer.run do |config|
    
  4. 在 rails 2.3 引入 Bundler , 教學

我個人兩個站各是用 2,3 的方法.

參考資料:

對你家美術好一點 @ Ruby Tuesday #15 的經驗分享

這是我在 Ruby Tuesday #15 的經驗分享.

2010年底近況更新

離上一篇部落格文章快滿兩年了. 快速交代這兩年的事情吧

  • 新訓遇颱風, 下部隊在外島聯勤單位當雜魚兵, 退伍遇88風災, 在外島多等一兩天才能返台…
  • 退伍後, 意外進入線上出版業.
  • 現在在通訊產業做網站.

這兩年以 Ruby on Rails 當主力, 以前熟悉的 C, Java 都快忘光光了…
最近積極學習 Javascript , HTML , CSS 等前端技術.

彙整