会话安全

  • 2020-09-14 10:41:49
  • 阅读次数:
  • 作者:盈岚科技小编
  • 来源:http://www.lyjtt.cn

做网站中,PHP不能保证会话信息只能被会话者看到。根据其存放的数据,还需要采取更多措施来主动保护会话的完整性。当然这些做法会降低用户的方便程度。

下面行为都会将会话ID泄露给第三方,使第三方能够访问所有与指定ID相关联的资源。   

•URL携带会话ID。如果连接到外部站点,包含有会话ID的URL可能会被存在外部站点的引用日志中。   

•如果会话ID未加密,以明文方式在网络中传输,就很容易被第三方监听到。在默认情况下,所有与特定会话相关的数据都被存储在由配置选项session.save_path指定的目录下的一个文件中。对每个会话会建立一个文件。这是由于每打开一个会话即建立一个文件,不论是否有数据写入到该文件中。为此用户需要学习和使用会话加密方法,具体说明如下。   

•session_encode:对Session信息进行编码。

string session_encode(void);

该函数返回的字符串中包含全局变量中各变量的名称与值,如a|s:12:"it is a test";c|s:4:"lala";。a是变量名,s:12代表变量a的值"it is a test"的长度是12,变量间用分号“;”分隔。   

•session_decode:对Session信息进行解码。boolean session_decode (string data)

该函数可对Session信息进行解码,成功则返回逻辑值true。PHP 5不再使用session_id,而是把它变成一个常量SID,并保存在Cookie中。如果客户端禁用了Cookie,PHP会自动通过URL自动传动SID,其条件是设置php.ini中的ses-sion.use_trans_sid = 1。最后使用strip_tags()输出SID,以避免XSS相关的攻击。很多PHP开发人员喜欢使用Session会话变量,大量使用会话变量能够帮助你设计更多人性化的功能。仔细分析原因:   

•传递简单。在Web应用程序内的页面间传递一个变量值,使用Session变量要比通过查询字符串传递变量值更简单。   

•使用方便。读者可以在任何时候直接使用Session变量。   

•更容易设计出针对不同用户的设计体验。Web设计的趋势就是要以用户体验为中心,自然使用Session变量是最佳选择。但是当初学者逐渐掌握Session的使用时,也应该注意几个问题,避免在开发中乱用Session变量。   

•Session过于依赖进程。Session状态存储在服务器的进程中。所以当inetinfo.exe进程崩溃时,Session会话信息就会全部丢失。   

•Session过于依赖Cookie。用户会话信息都存储在Cookie中,如果客户端完全禁用掉了Cookie功能,Session提供的功能也就自然失效了。   

•Session作用域的局限性。用户会话信息不能够实现应用程序之间迁移。例如,百度网站的Web服务器可能不止一个,当用户登录其中一个频道之后,可能需要去各个频道中浏览,但是每个频道都在不同的服务器上,如果想在这些Web服务器共享Session会话信息就是一个很麻烦的问题。   

•任何变量和对象都会占用系统资源。Session变量同样需要有单独的运行时间和存储空间。过多地使用Session变量就会导致大量代码冗余,并且使服务器运行成本提高。   

•当一个用户访问某个页面时,每个Session变量的运行环境便自动生成,这些Session变量可能会在用户离开该页面后仍然保留,直到有效期过后。这必然构成对用户安全的威胁。同时,如果在Session中存储较大的对象(如ADO组件中的Recordsets、Connections对象等),当站点访问量增大时,服务器将会因此而无法正常运行。   •由于创建Session变量比较随意,可随时调用,不需要开发者去声明,所以过度使用Session变量将会导致代码阅读性差,而且不好维护。鉴于PHP提供的Session变量存在很多局限性,使得PHP中Session成为了一个更加强大的功能。但是在PHP中,个人建议你要少用Session,只有在必要时选择使用,以简化Web开发。


当前文章标题:会话安全

当前URL:http://www.lyjtt.cn/news/wzzz/3276.html

上一篇:设置会话有效期

下一篇:认识Cookie

网站建设、抖音推广、头条推广、微信朋友圈推广、快手推广专线:15368242187(微信同号)