http請求中http_referer使用錯誤的經典案例

      一般狀況下,用戶瀏覽須要登陸驗證的頁面a,咱們會將頁面跳轉到登陸頁b,並帶上頁面a的url。在用戶經過登陸驗證後,跳轉到頁面a,讓用戶繼續訪問。php

      在咱們的項目裏,我看到同事在php的登錄驗證接口login裏,用$_SERVER['HTTP_REFERER']獲取並輸出referer,前端同事拿到referer並確保服務端確認用戶經過登陸驗證後,將頁面重定向了referer。前端

      事實上,http請求中的referer,就是發起http請求的當前頁面的url,並非當前頁面的document.referrer。同事代碼的結果就是,頁面沒有跳轉到用戶想訪問的頁面(即上述的頁面a),而是再一次跳轉到登陸頁。瀏覽器

      通過查找資料得知,http_referer由瀏覽器生成,並非全部瀏覽器都會設置該值,http_referer能夠僞造,不可信。此處login接口返回http_referer的作法並不穩當。url

      應該用php的current_url()獲取用戶當前訪問頁面的url(即頁面a),判斷用戶須要登陸驗證且用戶未登陸,內部重定向到登陸頁login並帶上current_url()獲取到的url。前端同事拿到這個url(假設爲c),在獲得服務單返回用戶已經過登陸驗證的響應後,把頁面重定向到c。由於current_url()拿到的是頁面a的正確url,因此用戶能夠繼續訪問頁面a。接口

相關文章
相關標籤/搜索