【青训营】- 认识XSS和CSRF

XSS

XSS 是什么?

XSS是Cross-Site Scripting的缩写,中文名为跨站脚本攻击

XSS 攻击

XSS攻击主要是指向网页中注入恶意指令代码,然后用户加载执行来完成攻击。

XSS攻击主要利用:
123.jpg

⭐️XSS攻击的一些特点:
1.通常难以从UI上感知(暗地执行脚本)
2.窃取用户信息(cokkie/token)
3.绘制UI(例如弹窗),诱骗用户点击、填写表单
复制代码

XSS 常见类型

Stored XSS (持久型)

⭐️特点:
- 恶意脚本被存在数据库中
- 用户访问页面后读数据然后被攻击
- 危害最大,对全部用户可见
复制代码

Reflected XSS (反射型)

⭐️特点:
- 不涉及数据库
- 从url上进行攻击
复制代码

DOM-based XSS

通过修改DOM节点完成攻击

⭐️特点:
- 不需要服务器的参与
- 攻击的发起+执行都在浏览器中执行
复制代码

Reflected XSS VS DOM-based XSS

?两者区别在于插入脚本的地方不同

QQ截图20210823162835.jpg

Mutatuin-based XSS

⭐️特点:
- 利用浏览器渲染DOM的特性(特性优化)
- 不同浏览器,会有区别(按浏览器进行攻击)
复制代码

XSS 防御

⭐️XSS的核心防御理念:
永远不要相信用户
!不要将用户提交内容直接转换为DOM

XSS防御现成工具

前端:

  • 主流框架默认防御 XSS
  • 手动操作dom,使用google-closure-library

服务端(Node):

  • DOMPurify

动态生成DOM如何防御XSS?

  1. string->DOM
    一定要从string中过滤
  2. 用户上传svg
    常见,但是要考虑到svg中内置的script标签,所以要进行过滤
  3. 自定义跳转链接
    如果允许用户自定义跳转链接,一定要过滤,最好不要允许
  4. 自定义样式
    过滤background发送的http请求,最好不要允许用户自定义样式

?XSS到底如何预防:

  1. 输入过滤
  2. 预防DOM型攻击
    在使用.innerHTML、.outerHTML、document.write()时要使用安全的数据,不要把不安全的数据插入到页面上,尽量使用.textContent、.steAttribut()等
  3. 前端渲染把代码和数据分隔开
  4. 拼接HTML时对其进行转义

CSRF

CSRF 是什么?

CSRF是Cross-site request forgery的缩写,中文名为跨站伪造请求

⭐️特点:
- 在用户不知情的前提下
- 利用用户权限(特指cookie)
- 构造指定HTTP请求,窃取或修改用户敏感信息
复制代码

CSRF demo

QQ截图20210823165300.jpg

CSRF 常见攻击方式

  1. 构造get请求
    主动型:用户点击构造的标签,发出请求,构成一次CSRF攻击
    被动型:只要访问页面,发出get请求,构成一次CSRF攻击
  2. 构造别的请求
    攻击者可以利用<form>构造任意的请求,通过type="hidden"传递各种值

CSRF 防御

QQ截图20210823170351.jpg

  1. 通过验证HTTP请求来源从而达到限制伪造请求
    通常限制请求头部 origin,referer

  2. token机制—判断请求来自合法来源的方式
    在请求地址中添加token并验证
    QQ截图20210823170718.jpg
    ⭐️实现过程:

    QQ截图20210823170826.jpg
    ⭐️!token会和用户绑定:因为攻击者也可以是注册用户,所以用户只能获取自己的token
    ⭐️!过期时间:向前保密,以防攻击者使用其它用户过期的token进行攻击

  3. iframe攻击
    如果同源请求,使用响应头部X-Frame-Options:DENY/SAMEORIGIN(指定页面能否作为iframe)

  4. GET !== GET + POST
    当GET == GET + POST,如有CSRF攻击,就可以一次获取和更新信息,所以要将GET 和POST分开两个接口

  5. SameSite Cookie
    只有同源请求才能发送cookie
    现在主要浏览器默认是Lax模式,相对Strict而言,首次导航可以带cookie
    strict模式:
    首次导航,就算是同源,也不能带cookie,只有当首次导航结束后,页面再次发送请求,能携带cookie
    ⭐️首次导航的限制可以避免敏感操作跳过二次确认

防御CSRF的正确方法:

在一个中间件统一处理CSRF防御

引用参考

blog.csdn.net/qq_33929420…

最后

本次学习了XSS和CSRF的一些基础知识,以及如何防御XSS和CSRF。当今互联网发展深入我们的生活,也有一些不怀好意的人通过攻击获取隐私的数据内容,所以信息安全也变的十分重要。
如有错误,欢迎指正~!

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享