PHP-关于PHP的session安全问题

PHP-关于PHP的session安全问题

虐人心 发布于 2017-05-15 字数 173 浏览 1141 回复 2

我想凡是做PHP开发的朋友,无可避免的都会涉及到session安全问题,比如说设置session过期时间,在服务器存储验证信息,想听下在session安全方面还有哪些需要注意事项和防范技巧?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

想挽留 2017-10-19 2 楼

1.session使用过期时间设为0的cookie,seesionid唯一标识符,在服务器端同步生成一些session文件(可以自己定义session的保存类型,比如默认,mysql,memcache看具体项目需求)
2.安全方面主要验证session的真伪性:

if(!isset($_SESSION['user_agent'])){
$_SESSION['user_agent'] = $_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'];
}
/* 如果用户session ID是伪造 */
elseif ($_SESSION['user_agent'] != $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT']) {
session_regenerate_id();
}

3.在存储数据的时候尽量加密或者数据格式自定义规则,让人不易看出真实数据。

瑾兮 2017-08-06 1 楼

Cookie是保存在用户计算机上的,可以被修改和伪造。而Session是保存在服务器端的,通常使用hash表存储。
但Session一般使用Cookie的SessionID字段传送,所以服务器被迫为SessionID设置一个过期时间,否则可以使用Cookie伪造。
例如: 若服务器某某后台页面没有过滤好XSS,且靠Session来完成某些功能,如添加管理员。这样可以构造iframe:<iframe src=http://自己的空间/xxx.html,xxx.html里引用后台Session验证的代码。这样当管理员登陆时就会执行xxx.html,把自己的Session传给后台,从而通过验证添加管理员账号。而ie环境iframe对本地Cookie是无法发送的,但是session在服务端所以可以发送。

虽然大部分网站session id由cookies传递,但安全性要求较高的网站,如银行应用程序一般由隐藏表单来控制,而且会对每个页面建立令牌和更为严格的控制。为了方便用户通常使用session共享机制或多令牌机制来支持并行会话。由于存在多个有效令牌,只要session没有过期,一旦令牌被劫持即使用户退出了也依然会受到会话劫持攻击。
session防御方法:
1.session令牌由https传递,最好由隐藏表单post实现。
2.防止并行登陆。每一次用户登陆销毁旧会话,发布新令牌。
3.会话处于非活动状态一段时间(如10分钟)后,令牌需要销毁。
4.非常关键的地方使用每页面一个令牌,不过会影响应用程序的功能,如前进后退失效。

至于令牌,一般是使用以时间为随机数通过加密产生的,这样在页面提交时无法伪造。比如,我测试过使用修改HTTP封包信息来上传木马到公司某某页面,由于有Token的作用,无法利用成功!