2016-04-08 53 views
1

我们假设一些使用会话参数的验证数据从一个PHP页面传递到另一个页面。Php会话数据是否安全?

我怎么能确定在第二个php页面上,这个会话数据仍然是我在第一个php页面上验证的数据?据我所知,会话数据存储在用户计算机上的cookie中。那么是什么阻止了用户将损坏的数据注入到会话cookie中呢?

因为在我的情况下,我需要依靠的事实,传递到第二页的数据已经验证。

所以主要问题是如何将验证数据安全地从一个页面传递到另一个页面?

提前许多感谢, 弗洛

+1

否。会话数据存储在服务器上。您可以将会话数据存储在cookie上,但是,php通常不会这样做,您必须自己实施它。长话短说,会议应该足够安全。 – Andrew

+1

所有存储在cookie中的内容都是会话标识(PHPSESSID)。您的数据安全地保存在您在php设置中指定的目录中。你无法避免的是让用户不要更改他的PHPSESSID,这也不是问题,因为他不会将信息添加到会话目录中。 PHP只是丢弃无效的ID并生成新的ID。 –

+0

[Laravel 4会话变量是否安全?](http://stackoverflow.com/questions/31948725/are-laravel-4-session-variables-secure) –

回答

3

会话数据本身存储在服务器端。唯一存储在客户端计算机上的是具有唯一标识符的cookie,因此服务器知道在服务器端加载哪个会话。

用户不能操纵存储在会话本身中的数据,因此从这个意义上说,会话是安全的。

当然,cookie本身可能会被用户盗用并被其他用户使用(称为“会话劫持”)。您可以通过例如将会话锁定到其IP地址,浏览器版本等,并使用HTTPS来防止人们嗅探连接来保护您的用户。

+1

我知道会话劫持的实践。因为最近我读了这本书“浏览器黑客手册”(非常好的安全相关程序员阅读)这使我有点偏执我猜^^。但会话劫持并不是真正的问题,因为用户可能知道数据,但他们不能改变它。 非常感谢在这方面 – flxh

1

不要存储会话数据的cookie .Store在服务器端$ _SESSION []中的会话数据。例如

<?php 
session_start(); 
// VALIDATION CODE 
$_SESSION['name'] = 'Validation name'; 
?> 

现在在第二页检查此会话是否设置。如果设置,那么用户验证

<?php 
session_start(); 
if(isset($_SESSION['name'])){ 
// USER IS VALIDATED 
}else{ 
// UNAUTHORiZED Access 
} 
?> 

这将是服务器端,所以你不需要一次又一次验证。 谢谢

+0

你可能想说:“......你不需要再次验证”。否则我不明白 – flxh

0

从我所了解的会话数据存储在用户计算机上的cookie中。

不是。

会话数据存储在服务器上,并通过cookie与特定用户+浏览器关联。

通过编辑cookie中的用户只能:

  • 访问别人的Cookie(不太可能)
  • 获取一个新的空会话

注意,还有一个会议cookie这是数据存储在客户端的地方。这是一个没有过期数据的常规cookie,当浏览器关闭时这些数据将过期。这种类型的Cookie通常用于在客户端上存储会话ID。

+0

对不起,胖手指投票 - 这是手机故障 –

+0

@Dagon - 你可以再次点击它,以删除它 – Quentin

+0

是对不起它的手机,你试图打你下来,它得到了锁定,但我相信你会活下来的代表损失:-) –

1

会话数据只存储在服务器端,从而在会话的用户不能编辑任何东西,所以它会被保存到假设第1页验证的数据将是第2页。

// Page1.php 
// Set the session on page 1 
session_start(); 
$_SESSION['myValue'] = 'secure_value'; 

// Page2.php 
// Get the session on page 2 
session_start(); 
$validValue = $_SESSION['myValue']; 
相同的数据

不要在cookie中存储任何敏感信息,因为这些存储在客户端&可以改变!