2013-04-25 43 views
1

如果有什麼我用我不知道是安全的:標題(「位置:」)可以安全使用?

Header(「Location:」); 

我想用這樣的: $用戶將用戶會話和1意味着管理員。 (只是一個例子。)

 if($user != 1){ 
    header("location: index.php"); } 

所以纔會使用該頁面,其中包括下載文件,看該頁面的源代碼此停止用戶? 因爲我的adminpanel會有下載,並且還會插入主頁..

如果使用不安全或使用它的方式。我應該用什麼來代替?

謝謝。

+1

您應該使用絕對URL,而不是相對那些頁面。 – nickb 2013-04-25 17:39:36

+1

我建議在'header'語句後面使用'exit;'。 http://stackoverflow.com/questions/3553698/php-should-i-call-exit-after-calling-location-header – showdev 2013-04-25 17:40:11

+0

我在打電話(所以我不能給出太多的解釋),但瀏覽器沒有看到原始的PHP。並在頭重定向後調用exit()。 – 2013-04-25 17:40:36

回答

2

header()可以安全使用,但這意味着您必須在之間每包含該呼叫,您不希望非管理員查看該頁面。

更好的辦法是有一個處理這個問題的認證用戶類。好處是,它可以幹你的代碼。

<?php 
class User 
{ 
    public function __construct() 
    { 
     // create your user however, i.e. fetch a record from your database 
    }  

    public function isAdmin() 
    { 
     return ($this->user->role == 'admin'); 
    } 

    public function redirect() 
    { 
     header('Location: index.php'); 
     exit; 
    } 
} 

,然後用它在你的代碼:

<?php 

$user = new User(); 

if (!$user->isAdmin()) { 
    $user->redirect(); 
} 

// continue with your page as normal; user here is an admin 
+1

如何包含'$ user = new User();如果(!$ user-> isAdmin())$ user-> redirect();'比現在更容易? – 2013-04-25 17:50:07

+0

感謝我現在得到的信息。 :) – lepel100 2013-04-25 18:04:15

+0

@Kolink因爲如果他們想要重定向到一個不同的URL,那麼他們必須遍歷每個實例並更改URL,而不是隻使用一個類方法中的URL。 – 2013-04-25 20:07:08

2

設置位置標題後,請不要忘記die()。這就是真正阻止人們使用他們不應該訪問的網頁的原因。

1

我覺得自己像一個更好的方式是退出頁面,並阻止任何其他代碼執行後。我不確定,但用戶可能能夠忽略頭重定向請求,如果他們想。

我一直只是添加了一個小片段,如「對不起,這隻適用於管理員」,然後只是返回;或退出;

編輯:很棒googly moogly你們很快抽籤。

1

那麼這裏發生的是,通過設置Location標籤,你實際上給回一個HTTP 30X的要求,用戶的瀏覽器指向新的頁面。但是,它在瀏覽器的手中來尊重它。如果瀏覽器/用戶是惡意的,他可能會忽略它。

因此,您需要在發送位置標頭die()後立即停止輸出。比它的安全 - 瀏覽器沒有得到任何數據不應該得到

0

使用die(header("Location:..."));

相關問題