1,csrf
跨站请求伪造。
利用用户的登录状态,通过第三方的站点,来实现破坏。
与XSS不同的点在于:XX利用站点内信任的用户,而CSRF则伪装为受信任的用户来攻击。
1, 发生CSRF的必要条件
- 登录受信任的网站,并在本地生成cookie。
- 在不登出信任网站的同时,访问危险网站。
2,解决方法
1,利用cookie的samesite属性
将cookie设置为strict或者lax模式,这样在跨站点请求时,这些cookie不会被发送到服务器。
- Strict: 所有从当前域发送的非同域请求都不会带上cookie。
- Lax: 只在get方式是带上cookie,post,iframe/img等标签加载时不会带上
- None: 关闭SameSite,前提是必须同时设置secure属性(cookie只能通过HTTPS发送,否则无效。
2,验证请求的来源站点
根据请求头中的Referer和Origin(优先级更高)属性来判断请求的来源站点。
Referer 记录了请求来源的地址,Origin只包含了域名信息,没有具体的URL。
http referer是header的一部分。
3,CSRF Token
浏览器第一次向服务器请求时,服务器生成一个 CSRF Token。每次请求时都带上这个token,服务器验证token是否有效。
4,验证码
每次用户提交都需要在表单上填写一个图片上的随机字符串。
2,XSS
利用网站没有对用户输入进行转义处理或者过滤不足的缺点,添加恶意代码到web页面中。
1,类型
1,持久型(存储型)
恶意代码被存入到数据库中,会导致其他访问页面的用户被攻击。
典型的计时留言板的 XSS攻击。
1,解决方法
- CSP
- 转义字符
- 设置白名单或者黑名单
- HttpOnly 禁止通过document.cookie的方法获取到cookies。
2,非持久型(反射型)
恶意代码插入到URL中,作为参数提交到服务器,服务器解析并执行,
2,解决方法
1,转义字符
不信任用户的输入,对内容进行转义
2,CSP
内容安全策略。
通过指定有效域,支持CSP的浏览器将会仅执行白名单域上获得的脚本文件,忽略其他脚本文件。
CSP的本质上是建立白名单,开发者明确告诉浏览器哪些外部资源可以加载和执行。.
- 设置http header中的Content-security-policy 的方式
default-src:定义针对所有类型资源的默认加载策略。
script-src:JavaScript的加载策略。
style-src:样式。
img-src:图片。 font-src: 字体。 - 设置meta标签的方式
<meta http-equiv="content-security-policy" content="default-src self">
- CSP属性值
*
允许加载任何内容
none
不允许加载任何内容
self
允许加载同源的内容
www.a.com
允许加载指定域名的资源