GoMind Hub

前端安全&认证

计算机知识思维导图:前端安全&认证。网页展示前三层结构,可在线查看完整脑图并下载 GoMind 文件。

2026-08-25

计算机知识学习资料思维导图
## 前端安全&认证
### 前端安全&认证
#### token
##### 安全验证令牌
#### cookie
##### 客户端存储,每次请求携带
##### 容量限制4k
##### 可被读取
##### 生命周期
##### cookie有什么用
##### cookie窃取和session劫持
##### 无需拿到session cookie,跨站发起请求就可以了,这就是CSRF
##### 思路
##### cookie简单操作
##### cookie记住用户名、密码
#### session
##### 客户端保存 session Id
##### 服务端存储 session
##### 载体
##### 场景
#### 登录模式
##### 网吧模式
##### 记住密码
##### 自动登录
#### 特征码
#### OAuth 1.0
##### Untitled node
##### OAuth跟OpenID差不多实际不属于SSO范围.是用户身份权限制认证。解决的问题是授权
#### SSO
#### OAuthor 2.0
##### Untitled node
##### Untitled node
#### https
#### OpenID
##### 实际上不属于SSO, 只是一种身份的认证而已。解决的问题是你是谁
#### 问题:
##### cookie是否可以被跨域读取(内存,本地)?

> 仅展示前三层结构;请在线查看完整脑图或下载 GoMind 文件。

前端安全&认证

前端安全&认证
安全验证令牌
token
内存
会话cookie
存储在硬盘上的cookie可以在不同的浏览器进程间共享
硬盘
持久cookie
客户端存储,每次请求携带
主要包括:名字,值,过期时间,路径和域
容量限制4k
广告类站点会使用cookie记录浏览过哪些内容
搜索引擎会使用cookie记录历史搜索记录
可被读取
浏览器退出时销毁
session cookie
设置了超时时间的cookie,会在指定时间销毁,cookie的维持时间可以持续到浏览器退出之后
persistent cookie/tracking cookie
只有通过https协议传输的时候才会带到网络请求中,不加密的http请求不会带有secure cookie
secure cookie
设置了这个属性的cookie在javascript中无法获取到,只会在网络传输过程中带到服务器
HttpOnly cookie
生命周期
cookie同时也是session id的载体
session管理
用户可以拥有自己的Google自定制主页
个性化
cookie也可以用于追踪用户行为,例如是否访问过本站点,有过哪些操作等
user tracking
cookie有什么用
防御 根据上面HttpOnly cookie
最基本的cookie窃取方式:xss漏洞
防御关闭所有phpinfo类dump request信息的页面
利用php开发的应用会有一个phpinfo页面。而这个页面会dump出请求信息,其中就包括cookie信息
xss结合phpinfo页面
关闭web server的trace支持来防御XST攻击
利用xss异步发起trace请求,又可以获取session信息
XSS + HTTP TRACE = XST
防御 针对header的内容做过滤,不能漏掉\r\n
HTTP Response Splitting
cookie窃取和session劫持
防御方式:使用anti-forgery token
无需拿到session cookie,跨站发起请求就可以了,这就是CSRF
大部分攻击都是提权行为,最基本的提权通过偷取用户名密码,不成功转而窃取session,窃取不成转而跨站攻击,实在不行重放也可以造成危害
思路
cookie简单操作
查看:document.cookie

存储:document.cookie="name=userName"
存
获取用户,密码,保存cookie
MD5加密:用户名+密码+有效时间+webkey(123456)
private final static String webKey = “123456”;

private final static long cookieMaxAge = 60 * 60 * 24 * 7 * 2; //设置cookie有效期是两个星期,根据需要自定义



===================================================



//cookie的有效期

long validTime = System.currentTimeMillis() + (cookieMaxAge * 5000);



//MD5加密用户详细信息

String cookieValueWithMd5 =getMD5(user.getUserName() + ":" + user.getPassword() + ":" + validTime + ":" + webKey);
BASE64编码:用户名+有效时间+MD5加密串(含密码)
//将要被保存的完整的Cookie值

String cookieValue = user.getUserName() + ":" + validTime + ":" + cookieValueWithMd5;



//再一次对Cookie的值进行BASE64编码

String cookieValueBase64 = new String(Base64.encode(cookieValue.getBytes()));
存入cookie
//开始保存Cookie

Cookie cookie = new Cookie(cookieDomainName, cookieValueBase64);



//存两年(这个值应该大于或等于validTime)

cookie.setMaxAge(60 * 60 * 24 * 365 * 2);



//cookie有效路径是网站根目录

cookie.setPath("/");



//向客户端写入

response.addCookie(cookie);
取
Base64解码
取出cookie中的用户名,并到数据库中检查这个用户
MD5加密:使用数据库中的 用户名+密码+有效时间+ webSiteKey
比对相同,写入Session,自动登陆成功
cookie自动登录
需前段MD5加密
MD5加密后比对,依然需要后台完成
与encodeURIComponent差别
http://www.w3school.com.cn/jsref/jsref_obj_global.asp

encodeURIComponent()	把字符串编码为 URI 组件。

escape()	对字符串进行编码。



示例:

escape("http://www.baidu.com")

"http%3A//www.baidu.com"



encodeURIComponent("http://www.baidu.com")

"http%3A%2F%2Fwww.baidu.com"
escape() 编码/unescape() 解码
字符被替换成了十六进制的转义序列



该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。其他所有的字符都会被转义序列替换



提示和注释提示:可以使用 unescape() 对 escape() 编码的字符串进行解码。

注释:ECMAScript v3 反对使用该方法,应用使用 decodeURI() 和 decodeURIComponent() 替代它



在本例中,我们将使用 escape() 来编码字符串:

<script type="text/javascript">



document.write(escape("Visit W3School!") + "<br />")

document.write(escape("?!=()#%&"))



</script>

输出:

Visit%20W3School%21

%3F%21%3D%28%29%23%25%26
javaScript 完成cookie 存,取
如密码可暴露在cookie中,则可无需加密. 可也无后台支持,全js完成cookie操作
cookie记住用户名、密码
cookie
客户端保存 session Id
session 存在在服务器的一个文件里(默认),不是内存
session 可以放在 文件,数据库,或内存中都可以
服务端存储 session
cookie(默认)
url重写
表单隐藏字段
载体
session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果 浏览器禁用了 cookie ,同时 session 也会失效(当然也可以在 url 中传递)
用户验证这种场合一般会用 session
注意关闭浏览器只会使存储在客户端浏览器内存中的session cookie失效,不会使服务器端的session对象失效
同一个账户在两个地方登陆,有人在一个地方改了这个账户的密码,另外一个地方还能发微博,web程序的身份认证只认session,无法知道你改了密码。
场景
session
勾选网吧模式后,登录的帐号会在歪歪注销/退出的时候自动清除,不会留在登录框中,可以保护自己的帐号不对外泄露,建议在外地上网时使用,比方网吧或者其他人机器上登录时
网吧模式
勾选记住密码后,系统会记住你所登录的帐号和密码,注销后帐号和密码会自动留存在登录框,退出后再登录,帐号、密码会自动出现在登录框。方便下次登录,建议在自己电脑上使用,以免造成不必要的损失
记住密码
记住密码后,再勾选上“自动登录”,这样下次登录时,会默认上次记住的帐号和密码,自动连接登录
自动登录
登录模式
特征码
Untitled node
OAuth跟OpenID差不多实际不属于SSO范围.是用户身份权限制认证。解决的问题是授权
OAuth 1.0
SSO
Untitled node
Untitled node
OAuthor 2.0
https
实际上不属于SSO, 只是一种身份的认证而已。解决的问题是你是谁
OpenID
cookie是否可以被跨域读取(内存,本地)?
问题: