研讨认证相关的安全问题也有一段实践了,今日就对认证相关的安全问题做个总结。其间涉及到一些前置概念这儿无法逐一解说,能够在相关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]黑客接单网