2011-12-29 164 views
7

page1.php中:用戶可以修改PHP會話嗎?

<?php 
session_start(); 
if ($_POST['password'] == "testpass") 
$_SESSION['authenticated'] = true; 
?>

使page2.php

<?php 
session_start(); 
if (isset($_SESSION['authenticated']) && $_SESSION['authenticated'] == true) { 
echo "Super secret stuff!"; 
} 
?>

用戶可以得到在沒有超級安全的密碼?

+1

的用戶不能修改服務器上的PHP會話。他們只能僞造合法的cookie並僞裝成已登錄的用戶 - 但這需要他們首先竊取有效的cookie。 – AbdullahC 2011-12-29 12:34:05

+1

不是你需要你對真實變量的檢查在你的測試用例,但比較布爾值,當你最好不要使用相同的比較。 $ test === true。力爭儘可能嚴格。 – MetalFrog 2011-12-29 12:58:55

+0

@MetalFrog我知道,但如果沒有驗證(只是在這種情況下,基準),我會用==我還可以提供「真」或1或「1」 – BronzeByte 2011-12-29 13:09:36

回答

13

號中的數據$ _SESSION變量存儲在服務器上,用戶無法訪問。

會話是通過一個cookie耦合到用戶。具有標識符(即長隨機字符串)的cookie被髮送給用戶以識別用戶並將他與他的會話關聯起來。如果其他人可以訪問這個cookie,他可以使用相同的代碼來保證他是用戶,並且這樣他就可以在沒有密碼的情況下進入。

+2

感謝確認,通過提供更多的信息:) – BronzeByte 2011-12-29 13:07:50

+0

的問題是'能否獲得用戶在沒有超級安全的密碼',答案是YES? – 2011-12-29 13:10:03

+1

@PoelincaDorin - 我認爲任何人在他們的頭一點點的鹽可以看到什麼問題,什麼是正確的答案。你的不是。這是一個。 – 2011-12-29 14:15:28

1

會話只能從PHP代碼進行修改,它不像$_POST, $_GET, $_COOKIE

順便說一句,我認爲你可以使用empty()簡化您的條件:

<?php 
session_start(); 
if (!empty($_SESSION['authenticated']) { 
    echo "Super secret stuff!"; 
} 
?> 
+0

這只是一個基準;) – BronzeByte 2011-12-29 13:06:24

1

會議可以在不同的場合進行修改。請參見本 - >Session Poisoning

+0

+50!驚訝沒有投票了..任何更新的信息?你能記錄質量保證答案嗎? – wpcoder 2017-11-01 22:48:23