热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

phpsession应用与安全问题解决办法-PHP源码

ec(2);当然使用Session还有很多优点,比如控制容易,可以按照用户自定义存储等(存储于数据库教程)。我这里就不多说了。Session在php教程.ini是否需要设置呢?一般不需要的,因为并不是每个人都有修改php.ini的权限,默认Session的存放路径是服务器的系统临时文件夹,我们可以自定义存放在自己的文件夹里,这个稍后我会介绍。开始介绍如何创建

当然使用 Session 还有很多优点,比如控制容易,可以按照用户自定义存储等(存储于数据库教程)。我这里就不多说了。

  Session 在 php教程.ini 是否需要设置呢?一般不需要的,因为并不是每个人都有修改 php.ini 的权限,默认 Session 的存放路径是服务器的系统临时文件夹,我们可以自定义存放在自己的文件夹里,这个稍后我会介绍。

  开始介绍如何创建 Session。非常简单,真的。

  启动 Session 会话,并创建一个 $admin 变量:

// 启动 Session
session_start();
// 声明一个名为 admin 的变量,并赋空值。
$_SESSION["admin"] = null;
?>

  如果你使用了 Seesion,或者该 PHP 文件要调用 Session 变量,那么就必须在调用 Session 之前启动它,使用 session_start() 函数。其它都不需要你设置了,PHP 自动完成 Session 文件的创建。

  执行完这个程序后,我们可以到系统临时文件夹找到这个 Session 文件,一般文件名形如:sess_4c83638b3b0dbf65583181c2f89168ec,后面是 32 位编码后的随机字符串

,函数bool session_set_save_handler ( callback open, callback close, callback read, callback write, callback destroy, callback gc )就是提供给我们解决这个问题的方案.
该函数使用的6个函数如下:
1. bool open() 用来打开会话存储机制,
2. bool close() 关闭会话存储操作.
3. mixde read() 从存储中装在session数据时使用这个函数
4. bool write() 将给定session ID的所有数据写到存储中
5. bool destroy() 破坏与指定的会话ID相关联的数据
6. bool gc() 对存储系统中的数据进行垃圾收集
例子见php手册session_set_save_handler() 函数.
如果用类来处理,用

session_set_save_handler(
array('className','open'),
array('className','close'),
array('className','read'),
array('className','write'),
array('className','destroy'),
array('className','gc'),
)

关于session安全问题
攻击者通过投入很大的精力尝试获得现有用户的有效会话ID,有了会话id,他们就有可能能够在系统中拥有与此用户相同的能力.
http协议时无状态的,所以通常网站都会用session来标示一个用户。session在客户端就是一个保存一个特殊令牌的COOKIE,关键的信息是存放在服务器端的。但因为令牌是保存在客户端,并且要经过传输,所以还是很不安全的。

1、会话终止,但令牌仍处于活动状态

情景: 当用户退出时,程序只是删除了令牌(例如,通过发布一个清空令牌的Set-COOKIE指令)。然而并没有删除服务器端的数据,如果用户继续使用该令牌,仍然可以使用。
解决方法:退出后删除服务器端的数据。
测试方法:退出后,仍然使用该令牌,如果活动正常,这该令牌仍然有效。(使用Firefox的web developer 插件就可以)

2、令牌可以通过url传输

情景:如果可以通过url传输,攻击者使用攻击者站点上的链接,可以轻松的固定受害人的会话标识符,比如:http://www.example.com/index.php?PHPSESSID=fixed_session_id。假使受害者还没有一个example.com站点会话标识符的COOKIE,那么会话固定就成功了。一旦受害者使用了攻击者指定的会话标识符,那么攻击者就能劫持受害者的会话,并模仿受害者的用户代理,试图假装成受害者。
解决方法:在PHP中设置 use_only_COOKIEs 的值 1 , 在php中默认就是 1,可以不修改。

3、在网络上泄露了令牌

情景:网络以非加密方式传输会话令牌,则处在适当位置的监听者可以截取此令牌。
a、当用户登录时是使用http非安全通道时,用户与服务器间传输的所有的数据都是可以截获的。 这时登录者对于监听者是没有什么秘密可言的。这时候,如果截获的数据不足以执行第二次登录 (例如,一些银行系统会要求登录者提交不断变化的验证码)。如果攻击者想执行任何操作,就必须劫持他窃听的会话。

b、一些程序在一些HTTP页面就发送一个令牌,然后再登录页面开始使用https教程,并且登录时也不修改此令牌,结果最初并未通过验证的用户会话在登录后被升级为通过验证的会话。窃听者可以在登录前就拦截到这个令牌。所以为了提高安全性,程序可以在登录的时候发送令牌或发送一个新令牌。

c、程序容许通过HTTP登录,如果攻击者成功将用户的链接降级为HTTP,他仍然能够拦截这个令牌。

d、如果所有的页面都是用HTTPS,但图片和一些js,css教程等的静态文件是使用HTTP传输。这时如果静态文件和登录等页面时在同一个域下,令牌也会通过HTTP泄露。所以将静态文件使用别的域好处是很多的。
其他解决方法:
a、如果应用程序使用HTTP COOKIE传送会话令牌,应确认其设置了secure标记,防止他们通过非加密链接传送令牌。
b、不接受非安全登录
c、session和客户端的HTTP_USER_AGENT绑定,但该方法效果不是很理想,攻击者可以伪造这些数据。

4、客户端令牌易被劫持

a、网站存在跨站攻击漏洞,这样用户的令牌很容易被劫持。需要检查全站,避免出现跨站攻击,也可以设置COOKIE_httponly,可以在一定程度上避免脚本的攻击。具体可以参考 利用httponly提升应用程序安全性

b、攻击者可以使用其他针对用户的攻击,以不同的方式劫持用户的会话。包括实施会话固定攻击,即攻击者向一名用户发送一个已知的会话令牌,等待他们登录。
解决方法:1、可以每次登录成功后发送新的会话令牌
2、对令牌设定一个特别的格式,不接受其他格式的令牌,该方法效果并不是很好。


5、COOKIE范围过于宽泛

浏览器在提交COOKIE时会将COOKIE提交到设定的域及其任何子域,而不提交到其他域。如果应用程序将COOKIE的域设定的过于宽泛,会是程序出现各种漏洞。


6、令牌不够强大


令牌在其生成过程中,过于简单,或者有规律可循,从而使攻击者可以以常规方式预测或推断其他用户的令牌。例如,攻击者可以在A时间得到从网站正常获取一个令牌,在B时间在网站获取一个令牌,则通过分析,得到这个时间段的大量令牌样本,从而攻击。


解决方法:生成一个强大的令牌,得到足够的复杂度。但一些高强度的随机源必须采用足够的步骤获得足够的熵,这需要时间,所以通常不能满足需求。所以可以通过合并一些用户特有的数据来得到足够的熵。可以使用的数据:
1、一串随机数
2、来源IP地址
3、请求中的User_Agent消息头
4、请求时间
5、服务器私密的随机数
串联上面的数据,然后使用适当的散列算法(比如md5,SHA-256)等等对这个字符串处理。(将最容易变化的数据项放在散列输入的开始部分有助于最大化散列算法中的“雪崩”效应。


其他的一些增强安全的方法:

1、每页面令牌
在每个页面使用新的令牌,可以通过HTML表单传送,也可以使用COOKIE传送,如果出现不匹配的情况整个会话终止。

2、在执行重要操作前,要求进行两步确认操作

安全是个大问题,细节方面是最重要的。这篇文章是我在阅读《黑客攻防技术宝典-web实战篇》记下的笔记。
--冷锋

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();
}
?>


推荐阅读
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
author-avatar
yixianliu
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有