<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    軟件是對質量的不懈追求

    HTTP Referer二三事

    什么是HTTP Referer

    簡言之,HTTP Referer是header的一部分,當瀏覽器向web服務器發送請求的時候,一般會帶上Referer,告訴服務器我是從哪個頁面鏈接過來的,服務器 籍此可以獲得一些信息用于處理。比如從我主頁上鏈接到一個朋友那里,他的服務器就能夠從HTTP Referer中統計出每天有多少用戶點擊我主頁上的鏈接訪問他的網站。

    Referer其實應該是英文單詞Referrer,不過拼錯的人太多了,所以編寫標準的人也就將錯就錯了。

    我的問題

    我剛剛把feed閱讀器改變為Gregarius,但他不像我以前用的liferea,訪問新浪博客的時候,無法顯示其中的圖片,提示“此圖片僅限于新浪博客用戶交流與溝通”,我知道,這就是HTTP Referer導致的。

    由于我上網客戶端配置的特殊性,首先懷疑是squid的問題,但通過實驗排除了,不過同時發現了一個Squid和Tor、Privoxy協同使用的隱私泄露問題,留待以后研究。

    Gregarius能處理這個問題么?

    答案是否定的,因為Gregarius只是負責輸出html代碼,而對圖像的訪問是有客戶端瀏覽器向服務器請求的。

    不過,安裝個firefox擴展也許能解決問題,文中推薦的”Send Referrer”我沒有找到,但發現另外一個可用的:”RefControl“,可以根據訪問網站的不同,控制使用不同的Referer。

    但是我不喜歡用Firefox擴展來解決問題,因為我覺得他效率太低,所以我用更好的方式——Privoxy。

    Privoxy真棒

    在Privoxy的default.action中添加兩行:

    {+hide-referrer{forge}}

    .album.sina.com.cn

    這樣Gregarius中新浪博客的圖片就出來了吧?+hide-referrer是Privoxy的一個過濾器,設置訪問時對HTTP Referer的處理方式,后面的forge代表用訪問地址當作Refere的,還可以換成block,代表取消Referer,或者直接把需要用的Referer網址寫在這里。

    用Privoxy比用Firefox簡單的多,趕緊吧。

    From https to http

    我還發現,從一個https頁面上的鏈接訪問到一個非加密的http頁面的時候,在http頁面上是檢查不到HTTP Referer的,比如當我點擊自己的https頁面下面的w3c xhtml驗證圖標(網址為http://validator.w3.org/check?uri=referer),從來都無法完成校驗,提示:

    No Referer header found!

    原來,在http協議的rfc文檔中有定義:

    15.1.3 Encoding Sensitive Information in URI's



    ...



    Clients SHOULD NOT include a Referer header field in a (non-secure)

    HTTP request if the referring page was transferred with a secure

    protocol.

    這樣是出于安全的考慮,訪問非加密頁時,如果來源是加密頁,客戶端不發送Referer,IE一直都是這樣實現的,Firefox瀏覽器也不例外。但這并不影響從加密頁到加密頁的訪問。

    Firefox中關于Referer的設置

    都在里,有兩個鍵值:

    • network.http.sendRefererHeader (default=2)
      設置Referer的發送方式,0為完全不發送,1為只在點擊鏈接時發送,在訪問頁面中的圖像什么的時候不發送,2為始終發送。參見Privacy Tip #3: Block Referer Headers in Firefox

    • network.http.sendSecureXSiteReferrer (default=true)
      設置從一個加密頁訪問到另外一個加密頁的時候是否發送Referer,true為發送,false為不發送。

    利用Referer防止圖片盜鏈

    雖然Referer并不可靠,但用來防止圖片盜鏈還是足夠的,畢竟不是每個人都會修改客戶端的配置。實現一般都是通過apache的配置文件,首先設置允許訪問的地址,標記下來:

    # 只允許來自domain.com的訪問,圖片可能就放置在domain.com網站的頁面上

    SetEnvIfNoCase Referer "^http://www.domain.com/" local_ref

    # 直接通過地址訪問

    SetEnvIf Referer "^$" local_ref

    然后再規定被標記了的訪問才被允許:

    <FilesMatch ".(gif|jpg)">

    Order Allow,Deny

    Allow from env=local_ref

    </FilesMatch>

    或者

    <Directory /web/images>

    Order Deny,Allow

    Deny from all

    Allow from env=local_ref

    </Directory>

    這方面的文章網上很多,參考:

    不要使用Rerferer的地方

    不要把Rerferer用在身份驗證或者其他非常重要的檢查上,因為Rerferer非常容易在客戶端被改變,不管是通過上面介紹的Firefox擴展,或者是Privoxy,甚至是libcurl的調用,所以Rerferer數據非常之不可信。

    如果你想限制用戶必須從某個入口頁面訪問的話,與其使用Referer,不如使用session,在入口頁面寫入session,然后在其他頁面檢查,如果用戶沒有訪問過入口頁面,那么對應的session就不存在,參見這里的討論。不過和上面說的一樣,也不要過于相信這種方式的“驗證”結果。

    個人感覺現在Rerferer除了用在防盜鏈,其他用途最多的就是訪問統計,比如統計用戶都是從哪里的鏈接訪問過來的等等。

    posted on 2009-11-14 13:41 BlakeSu 閱讀(410) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产精品观看在线亚洲人成网| 免费无码一区二区三区蜜桃大 | 无码的免费不卡毛片视频| 亚洲国产日韩在线人成下载| 一本色道久久综合亚洲精品| 午夜亚洲国产成人不卡在线| 18禁超污无遮挡无码免费网站国产| 青青草无码免费一二三区| 国产一级婬片A视频免费观看| 久久精品国产亚洲av品善| 亚洲制服丝袜第一页| 亚洲高清在线播放| 亚洲一区二区三区香蕉| 亚洲精品国产电影| 深夜国产福利99亚洲视频| 成人爱做日本视频免费| 成人黄色免费网址| 182tv免费视视频线路一二三| 久久免费福利视频| 国偷自产一区二区免费视频| 国产精品成人免费观看| 一级女性全黄久久生活片免费| 国产成人综合亚洲| 最新亚洲人成网站在线观看| 亚洲精品无码久久久久YW| 亚洲色欲色欱wwW在线| 亚洲高清中文字幕免费| 久久亚洲国产最新网站| 亚洲私人无码综合久久网| 亚洲最大无码中文字幕| 亚洲色成人四虎在线观看| 亚洲最大无码中文字幕| 久久精品国产亚洲av瑜伽| 亚洲国产精品99久久久久久| 亚洲av日韩专区在线观看| 大桥未久亚洲无av码在线| 二级毛片免费观看全程| 9久热精品免费观看视频| 国产无遮挡无码视频免费软件 | 国产亚洲人成无码网在线观看 | 三年片在线观看免费观看大全动漫 |