2011-12-29 86 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

相关问题