2016-08-21 75 views
0

所以我一直在編寫一個登錄腳本,它在成功登錄後重定向到上一頁。我見過幾個方式來傳遞引薦網址:傳遞和檢索引用頁面url

  1. 使用$ _ SERVER [「HTTP_REFERER」] - 將整個引薦URL。可能被操縱。所以不要被信任。

  2. $ _GET並將referer作爲url參數傳遞。根本不安全。

  3. 在窗體中使用隱藏字段。即使使用POST也不太安全。

所以,由於方法2允許最大的靈活性,我選擇了這一點。問題是: 如果我通過沒有域的URL('http://www.domain.com/'被剝離),並且稍後在重定向時手動預先加載域,我能確定生成的URL重定向保留在我的域中嗎?如果不是,我該怎麼做以確保它不會偏離?

(假定,如果存在與結果的URL沒有網頁,它會被重定向到主頁)

如:http://www.domain.com/login.php?ref=category/products/product-1.php 成功登錄後,頁面會被重定向到'http://www.domain.com/'.$_GET['ref']

我知道應該怎樣做才能驗證形式URL參數:

  1. '../'可以幫助導航到前一個文件夾,並且必須刪除。

  2. 所有在referer url參數中傳遞的標籤必須被剝離。

  3. 必須刪除所有'://'。

+1

不知道我真的能理解,但會話變量(如數組)來存儲URL可以是適當的 - 你可以查找,在session var,前一頁並重定向到 – RamRaider

+0

在$ _SESSION中存儲這麼多的URL會對它產生什麼影響?在堆棧表單中使用它可能會有點問題,因爲那麼我將不得不進行檢查以查看他們是否瀏覽過該頁面,或者使用了瀏覽器上的後退按鈕。 – BlackPanther

回答

1

一些提示:

  1. 您不必爲重定向提供域在所有。因此,如果您不需要重定向到另一個域,請不要打擾 。當然 你必須檢查,如果某些域不僞造$ ref
  2. 您可以在$ ref中使用頁面別名而不是真正的URL,並在重定向之前構造url。
  3. 只有真正安全的方法是檢查確實存在你的頁面上的URL agains網址