澳门网投可靠网投

2019-11-02JavaScript2321
  • 詳情內容
  • 留言點評

在JavaScript中,document對象有很多屬性,其中有3個與對網頁的請求有關的屬性,它們分別是URL、domain和referrer。
URL屬性包含頁面完整的URL,domain屬性中只包含頁面的域名,而referrer屬性中則保存著鏈接到當前頁面的那個頁面的URL。
前面兩個很好理解,而referrer屬性簡單來說就是上一個頁面的URL。那麼這個屬性具體有什麼用處呢?

Document.referrer 返回 跳轉或打開到當前頁面 的頁面的 URI。如果用戶直接打開了這個頁面(不是通過頁面跳轉,而是通過地址欄或者書簽等打開的),則該屬性為空字符串。由于該屬性只是返回一個字符串,所以不能夠通過該屬性引用頁面的 DOM。

瀏覽器支持情況

關于HTTPS請求
如果在一張普通的HTTP頁面上點擊了HTTPS的鏈接,那麼在https請求頭部可以附上Referer信息,之後在HTTPS頁面中依然可以用document.referre來獲得普通的http頁面。

同樣,如果是在一張https頁面上點擊了另一個HTTPS的鏈接,可以在請求的頭部附上Referer信息。

但是如果是從一張https頁面點擊了http鏈接,那麼很不幸,發送的http請求頭里無法包含關于https頁面的信息,這可能是出于一種對https頁面的保護措施。
偽造Referer信息
根據上文的描述,document.referre源自于Header中的Referer。那麼如果想修改document.referre的值,理論上講,僅需要修改請求Header。可以將Header中現有的Referer替換成自己想要的值,如果原來沒有也可以添加Referer。

在客戶端,篡改Header是一件非常容易的事情。在一個頁面的http請求發出去之前,可以利用截包工具將其攔截,然後分析出頭部信息,並且修改Referre。

搜了一下,對于FireFox可以使用RefControl插件方便的進行修改。總之,欺騙Traffic source是輕而易舉的事情。

從https跳轉到http網站時,為了用戶隱私安全信息,瀏覽器默認不傳送referrer。

解決方式︰在https頁面中添加meta標簽

<meta content="always" name="referrer">

當然如果A站強制規定不發送referrer,B站又沒有對A站的控制權,那麼我們將無法獲取到referrer。

頁面強制Refresh

<meta http-equiv="Refresh" content="5;URL=a.html">

過5秒後瀏覽器會自動向server發起a頁面請求,經過測試,在IE8,FF3.6-FF4.0中,均不會帶有Referer信息,但是chrome卻能夠鬼使神差的把b.html作為Referer添加進頭部。

幾種意外丟失情況︰
1,直接在瀏覽器中輸入地址
2,使用location.reload()刷新(location.href或者location.replace()刷新有信息)
3,在微信對話框中,點擊進入微信自身瀏覽器,
4,掃碼進入微信或QQ的瀏覽器
5,直接新窗口打開一個頁面
6,從https的網站直接進入一個http協議的網站(Chrome下親測),
7.a標簽設置rel="noreferrer"(兼容IE7+)
8,meta標簽來控制不讓瀏覽器發送referer
9,點擊 flash 內部鏈接
10,Chrome4.0以下,IE 5.5+以下返回空的字符串,使用 修改 Location 進行頁面導航的方法,會導致在IE下丟失 referrer,這可能是IE的一個BUG
11,跨域
12,iframe隱藏

最後,一個簡單的結論是︰如果你需要通過 document.referrer 采集頁面訪問來源,最好不要使用 JS 跳轉或打開新窗口,也不要使用 meta 跳轉。referrer 的作用︰
1,統計來源,可以統計數量,可以拒絕訪問
2,返回上一頁邏輯判斷

歡迎點評!也可以是問題反饋和建議

支持Ctrl+Enter提交
  • 2條留言
  • 愛站幫2019-11-02 13:35:34
  • 確認過眼神,這是我的菜。
1

真心很贊,必須打賞!嗯,以資鼓勵~

點此打賞

99%看過的人還會看

澳门网投可靠网投 | 下一页