2012-11-20 124 views
2

我是新來的PHP編碼,基本上我創建一個用戶面板,用戶登錄,從那裏他們訪問他們的儀表板,讓他們做事情。PHP會話安全缺陷?

我使用PHP的會議要做到這一點,基本上在儀表板的頂部,我把:

session_start(); 
if(!session_is_registered(myusername)){ 
header("location:index.php"); 

這使得它如此誰沒有登錄的用戶是重新定向到索引。 PHP。

的問題是,有某些命令用戶可以從儀表板做的,是這樣的: /dashboard.php?reset=true

而且做這些命令不需要某種原因活動會話。任何人都可以轉到/dashboard.php?reset=true並重置所有內容,而無需激活會話!

有誰知道如何解決這個安全漏洞,允許人們做到這一點?

感謝

+1

這聽起來像是在執行'/dashboard.php?reset = true'時的安全缺陷,而不是PHP。根據定義,會話要求客戶端爲每個請求(通過cookie或查詢字符串)提供一個令牌。這並不意味着在採取行動之前你必須尋找它。你可以發佈那些代碼(進行重置)以及其他安全檢查嗎?問題可能在於此。 – jheddings

+2

缺少'出口;'。可以肯定的是,這不是如何使用['session_is_registered'](http://php.net/session_is_registered)(注意過去式)。 – mario

+0

@Mario - 這不就是答案嗎? – Robbie

回答

0

我想通過reset你的意思是密碼。只要拿到那個部分就可以問他們舊密碼以及新舊密碼。並且要停止機器人使用類似CAPTCHA的summat,

0

您需要輸入dieexit或以其他方式終止您的header()調用。 header()不會停止執行,因此即使它正在發送Location:重定向,它也將繼續通過您的代碼進行下載。

+0

這個修復了這個問題,非常感謝 – user1837725

0

可能是你正在使用PHP 5.4.x版本

session_is_registered已被棄用的PHP 5.3.0和去除PHP 5.4.0的。

使用isset($_SESSION['myusername'])而不是session_is_registered

編輯

exit應始終把從頭重定向後,die也能工作。

+0

isset($ _ SESSION ['myusername'])函數在5.3.0上還能工作嗎? – user1837725

+0

當然,是...... !! – Ravi

+0

非常感謝他的工作,這個網站是偉大的,我會堅持! – user1837725

2

快速回答: 你可以把相同的代碼放在/dashboard.php中?文件

更好 如果用戶是管理員通過聲明會話變量verfy。

重定向之前登錄的時候:

session_start(); 
$_SESSION['is_admin']="yes" ; 

在 「可執行文件」:

if(isset() && $_SESSION['is_admin'] == "yes") 
{ 
    //do your thing 
} 
else 
{ 
    echo : "you are not allowed to do that"; 
} 

更多安全提示:link 會指出一些安全問題,爲您

+0

,因爲它由Dev指出不要忘記開始會議 – bleuscyther