EP37-zake学web安全

184 阅读2分钟

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,验证请求的来源站点

根据请求头中的RefererOrigin(优先级更高)属性来判断请求的来源站点。
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
允许加载指定域名的资源