2011-05-06 47 views
0

是的,我知道,另一個HTTP_REFERER努力。當我看到它時,我會畏縮。但它已交給我作爲一個'回'問題的解決方案,它實際上是有效的,所以...PHP後退按鈕的最終HTTP_REFERER解決方案?

...問題是,我不明白它足以讓它感覺舒服地部署它住。

我在這裏經歷了很多關於HTTP_REFERER風險的消息,但是我被告知這個代碼解決了這個特定任務的問題......但我並不確信。

所以,我的問題是,在下面的代碼的底部 - 但首先,這裏是它背後的基礎:

這個代碼進入購物車。它提供用戶點擊「查看購物車」後「繼續購物」按鈕的操作。其目標是提供最適合(或預期)的重定向回到用戶來自哪裏。

默認情況下,如果未添加此代碼,此特定「查看購物車」頁面的「繼續購物」按鈕只會將用戶帶到購物車的主頁 - 如果用戶導航了幾頁深入尋找一套產品或特定類別,或正在尋找產品等等。所以我們想要改進這一點。另外,購物車需要JavaScript完成購買,如果用戶使用JS關閉訪問,用戶會收到警告,因此在此操作期間,用戶期望JS on。最後,我們希望將解決方案保留在單個代碼塊中,因此可以輕鬆應用並將其運送到購物車的更新版本中,而且幾乎沒有問題。

,因爲它是向我描述方法:

  1. 如果引薦設置,它不是空的,是的,它包含此車的域,然後

    1A。如果引用者是購物車頁面本身,則應用javascript(-1)效果,否則我們將被卡在一個地方

    1b。 ELSE繼續並應用Referer - Done。

  2. 否則,如果A設置,並參考它不是空的,但沒有它不包含此車的域,然後

    2A。有什麼不對勁,請將它們發送到主頁。 (??爲什麼??)

    2b。 ELSE讓我們應用javascript(-1)效果。 - 完成。

代碼:

if ((isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER']) && (strpos($_SERVER['HTTP_REFERER'], HTTP_SERVER) === 0))) { 
    if ($_SERVER['HTTP_REFERER'] == HTTP_SERVER . 'index.php?r=cart') { 
     $this->data['continue'] = 'javascript:history.go(-1)'; 
    } 
    else { 
     $this->data['continue'] = html_entity_decode($_SERVER['HTTP_REFERER']); 
    } 
} 
else { 
    if ((isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER']) && (strpos($_SERVER['HTTP_REFERER'], HTTP_SERVER) !== 0))) { 
     $this->data['continue'] = 'index.php?r=home'; 
    } 
    else { 
     $this->data['continue'] = 'javascript:history.go(-1)'; 
    } 
} 

我的問題:

  1. 好了,我們已將兩個可疑的方法,和集體似乎工作。但是這個(安全/功能)會出什麼問題呢?我在這裏有一個showstopper,我失蹤了?

  2. 第二部分(2.和2a)將完成什麼?這是向我解釋,以確定是否有人故意試圖餵養一個錯誤的引薦者 - 但它對我來說沒有意義 - 爲什麼我們關心將該人路由到主頁與使用JavaScript( -1)方法?

  3. 有關改進的任何想法?那些總是在handly ;-)

感謝您在本幫助時...

+1

referer由客戶提供,並不可靠。你可能會有更好的運氣存儲在會話變量中查看的最後一頁。 – dqhendricks 2011-05-06 17:59:33

+0

你好,謝謝...這是這篇文章的關鍵點......通過檢查引用者(1)是否存在,(2)是否爲空,以及(3)是否包含*購物車的域名,然後默認爲javascript方法......它也符合我們自我包含的要求。我知道有更好的解決方案,涉及會話變量等,但在這種情況下,我試圖專注於此http_referer版本,以查看它是否可行在這個應用程序中或不... – Soyo 2011-05-06 18:18:13

+0

永遠不要依賴JavaScript作爲倒退! – 2011-05-06 19:22:31

回答

1

的Referer是單純只是最後一頁纔去拜訪車用戶。

  1. Javascript:history.go()包含一個類似於引用者的訪問頁面的數組,因此它可以向用戶發回歷史頁面。除非購物車沒有超時,否則我不知道會有什麼風險。但我不是一個安全人員,所以讓更多知識的人解釋那裏的風險會更好。

  2. 如果用戶從某個其他網站直接跳入購物車,那麼實際上應該有些不對勁,而不是將它們留在那裏,將它們發送到主頁。在這種情況下,java是一個客戶端軟件,所以它不會有瀏覽您的網站的歷史記錄用於將用戶發送到您的主頁。

  3. 如果你真的不喜歡引薦,麪包屑總是另一種選擇,或$ _SESSION [ '|上一頁'] = ....

糾正我,如果我錯了。

+1

非常感謝您的回覆......哈哈哈「如果您真的不喜歡引用者」...嘿,我想要喜歡它! ;-) ......主要是我從安全角度不信任它,這是我最關心的問題。關於主頁問題的重點......我想如果它能檢測到用戶來自外部網站,直接進入「購物車視圖」,那麼將它們發送到主頁將至少將它們留在商店中,而不是將他們發回原始網站。當然,如果沒有引用者,那麼JavaScript默認會將它們發回...但是,雖然...似乎不太可能的訪問...? tx – Soyo 2011-05-06 18:29:03

+0

不太可能,但並非不可能。特別是當你有人試圖破解你的購物車;) – robx 2011-05-06 18:30:21