2010-05-16 27 views
2

以下是保護用戶唯一區域的安全方法嗎?使用PHP header()&exit()會在重定向之前安全地終止腳本嗎?

if(!isset($_SESSION['username'])){redirect(SITE_ROOT . 'st_pages/login/');} 

function redirect($url) 
    { 
     header('Location: ' . $url); 
     exit('<a href="' . $url . '">Redirecting you to: ' . $url . '</a>'); 
    } 
+4

如果你想打印一條消息到stdout,使用'die'而不是'exit'將退出狀態(一個int)作爲參數而不是一個字符串 – knittl 2010-05-16 18:03:20

+0

其實這是不對的。如果退出的第一個參數是一個字符串,它將輸出它。如果它是一個整數,則它用作退出狀態(例如,用於CLI腳本)。所以上述可以這樣做。 – 2010-05-16 21:00:52

回答

4

是的,它是安全的

雖然頭()不終止任何東西,但退出()確實終止腳本。這是此功能的唯一目的

0

重定向部分可以這樣做,應該是安全的。

有趣的問題是如何檢查會話中的用戶名是多麼安全。這取決於腳本的前面的內容。

第二個有趣的問題當然是,對該區域的未授權訪問有多重要,以及您希望投入多少安全工作。

0

我通常使用:

<?php 
die(header("Location: page.php")); 
?> 

無論這是否是做的最好的事情,我並不主張!另外,正如b_i_d所說,我個人不會通過檢查用戶名來檢查會話,因爲它不完全安全......會話是否可以被編輯?通常,我會存儲用戶名和密碼(當然是MD5'ed),然後針對數據庫運行該查詢以查看是否存在具有這些詳細信息的記錄。