欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

一文看懂认证安全问题总结篇

来源:本站整理 作者:佚名 时间:2019-04-29 TAG: 我要投稿

研究认证相关的安全问题也有一段实践了,今天就对认证相关的安全问题做个总结。其中涉及到一些前置概念这里无法一一讲解,可以在相关RFC文档或者链接中深入阅读,笔者已经把相关资料整理收录在参考链接。本文更多的是对认证相关的安全问题做个总结。另外文中引用了一些网络中的图片,由于来源不一,所以就不逐个标明,在此一并感谢。

先对这些认证相关的东东做个简单的归类:
PKI,X509是公钥密码领域用来进行公钥认证,管理,分发的机构以及规范;
cookie,session,JWT是web领域保持会话状态的;
ADS是活动目录服务器系统,与LM,NTLM,kerberos一道与windows认证或windows域认证密不可分;
Oauth和OpenID都可以作为认证需求,只不过前者多了授权的概念;
SSO是单点登陆,是企业里面使用比较多的概念,实现了SSO的协议有很多,包括kerberos,CAS等,而SAML就作为单点认证过程中的xml数据载体,也可以说是一种协议,提供了协议商定字段规范。咋一看会觉得SSO和Oauth,OpenID有点类似,其实他们很不一样。SSO希望达到的效果是登陆一次在expire期限内访问所有服务,即使是跨域状态,但是Oauth或者OpenID实现的是使用同一平台账号登陆不同服务。
这里会有疑问,这样看来不是和SSO一样了吗?其实不然,我们注意到Oauth或者OpenID登陆不同的服务是需要一直授权的,举个例子,我们登陆淘宝和微博是需要授权两次,但是在SSO中就不一样了。举个例子,在公司中我只要认证一次,就可以访问生产网上的所有服务,也可以访问办公网上的一些资源,我们只需要一次认证,这样来看就可以理解二者的不同了。
0×01 cookie,session,JWT
cookie,session, JWT都可以用来记录会话状态,JWT是一种相对前两者比较新的概念,和cookie一样需要保存在客户端,session保存在服务端。这里先主要聊聊cookie和session。
直接看几张图我们就可以对cookie,session的原理有所了解。
以php为例,服务端session生成以及cookie生成的过程:

客户端cookie和session的体现,session字段在cookie里面

浏览器对cookie和session的缓存

服务端对session的保存形式

根据使用习惯有以下几点特性:
1. cookie数据存放在客户的浏览器上,session数据放在服务器上;
2. cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使;
3. 用session。将登陆信息等重要信息存放为SESSION,其他信息如果需要保留,可以放在COOKIE中,减轻服务端压力。
4. 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
cookie的六元组的理解
setcookie(name,value,expire,path,domain,secure,httponly)
1\. name和value字段自是不必多说,key-value键值对
2\. expire规定了cookie的过期时间
3\. path从路径上指定了在请求某个特定的url目录的时候需要发送cookie值到服务端
4\. domain则从域名上指定了在访问某个域的时候需要发送cookie值到服务端,默认就是产生cookie时候的域名,在大型的多子域名下的网站可以使用这个字段将domain设置成根域实现cookie共享。
5\. secure属性则表明只有当一个请求通过 SSL 或 HTTPS 创建时,包含 secure 选项的 cookie 才能被发送至服务器。这种 cookie 的内容具有很高的价值,如果以纯文本形式传递很有可能被篡改。
6\. httponly设置成 TRUE,Cookie 仅可通过 HTTP 协议访问。 这意思就是 Cookie 无法通过类似 JavaScript 这样的脚本语言访问。 要有效减少 XSS攻击时的身份窃取行为,可建议用此设置(虽然不是所有浏览器都支持),不过这个说法经常有争议。 PHP 5.2.0 中添加。 TRUE 或 FALSE
会话控制关键配置php.ini
https://www.php.net/manual/en/session.security.ini.php
注意到会话中有一些配置和之前提到的cookie六元组有相似的地方,但是设置的地方不一样,session是通过php配置项直接管理,而cookie在运行时设定,通过set-cookie相应头反馈给客户端。
# 有效期
session.cookie_lifetime = 0
# 有效路径
session.cookie_path = /
# 有效域
session.cookie_domail=...
# httponly属性
session.cookie_httponly = 1
# 防御会话固定,防止session未初始化,默认是0不开启,[https://wiki.php.net/rfc/strict_sessions](https://wiki.php.net/rfc/strict_sessions)
session.use_strict_mode=0
# 是否安全传输,仅当使用https传输时才可访问会话
session.cookie_secure = on
# 表示SESSION技术的实现是否需要依赖COOKIE 1表示是 0表示否。如果开启会话id将只在cookie中存储,避免了url传递会话的攻击。
session.use_only_cookies = 0
# 表示是否允许使用表单传值的方式传递PHPSESSID 0表示否 1表示是
session.use_trans_sid = 1
# session的散列函数
session.hash_function="sha256"
下面主要聊聊cookie和session常见的安全问题:
1. cookie字段未设置HttpOnly容易被DOM访问,结合xss

[1] [2] [3] [4] [5] [6]  下一页

【声明】:黑吧安全网(http://www.ylxj.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载