2011-08-31 209 views
0

如果我希望人們只使用我網站內的鏈接訪問我網頁上的某個頁面,而不是在地址欄中輸入它,那麼這樣做...PHP安全問題

請注意,用戶首先必須登錄他們的帳戶,並且所有成員頁面都已設置,以便用戶在訪問成員頁面之前必須登錄到他們的帳戶。

if (isset($_SERVER['HTTP_REFERER'])) { 

// show page content 

} 

else { 

header('Location:http://'); 
exit(); 
} 

上午我說,如果點擊一個鏈接後,頁面會顯示正確的,但如果該鏈接不點擊,其中的鏈接指向的地址欄會做的是輸入的地址重定向。

我在問,因爲鏈接將人們導向到一個表單,並且我不希望這個表單在沒有首先在前一頁設置一些變量的情況下被訪問,或者在沒有登錄的情況下被訪問(因爲人們可以創建他們的在其他網站上自己的鏈接指向同一位置)

感謝

回答

3

這是不安全的。來自here

將用戶代理引用到 當前頁面的頁面地址(如果有)。 這是由用戶代理設置的。並非所有用戶代理都會設置此項,有些用戶代理可以將HTTP_REFERER修改爲 功能。 總之,它不能真正被信任。

2

用戶可以設置引用到任何他們想要的,所以沒有,檢查某個設定是不是他們來檢查的安全方式的第二頁通過第一頁。

+0

他們如何設置引用者自己? – carlgcode

+0

我會這麼做的最快捷方式是在我的系統上創建一個主機,該主機是www.yourdomain.com,然後通過鏈接創建一個站點並單擊。這就是我如何做到這一點,而不知道如何欺騙它。我敢肯定,有一些Firefox插件可以用我剛剛解釋的一半能量來欺騙它。 – Layke

+0

http:// stackoverflow。com/questions/616980/how-do-you-spoof-http-referer – CanSpice

0

這對我來說似乎很麻煩;如果您想要設置某些變量和/或用戶登錄,只需檢查表單頁頂部的所有這些條件,並在未滿足條件的情況下將訪問者重定向到其他位置。

+0

用戶是否必須首先登錄纔沒有意義,如果沒有登錄,所有頁面都將無法訪問,因此只能使用鏈接訪問該頁面我已經定了,不是嗎? – carlgcode

+0

@carlgcode不,鏈接並不重要,您應該檢查任何需要用戶登錄的頁面,無論用戶是否已登錄並自動重定向到登錄頁面或錯誤頁面(如果不是這種情況)。 – jeroen

0

我不確定你在上一頁中設置變量的意思,或者你如何實現這一點。它當然是可能的,但我會對你如何去做感興趣。

但是,您的問題是正確的,即當來自另一頁面時,引用者將被設置爲該頁面。然而,就安全性而言,依靠它並不是一個好主意,因爲它很容易被欺騙。唯一確定的方法是要求提供憑據(用戶名和密碼等),這聽起來像你已經在做。

你不能測試看是否設置了變量,如果他們不是然後重定向?

1

HTTP_REFERRER可能很容易被欺騙。當你希望表單安全時,通過向該字段添加一個隱藏的標記並確保它在提交表單時匹配,實施某種CSRF保護。你最好的選擇是確保他們的憑證真正有效。