XSS攻击和CSRF攻击

XSS攻击


什么是XSS

Cross Site Scripting,简称 XSS ,是一种代码注入攻击,攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安全

XSS的注入方法

任何可以输入的地方都有可能有 XSS 攻击,如:

  • 在 HTML 内嵌的文本中,以 script 标签注入恶意内容
  • 在 href、src 等属性中,包含 javascript:等可执行代码
  • 在 onclick 等事件中注入恶意代码
  • 在内联的 js 中,拼接的数据突破了原本的限制(字符串、变量、方法名)等

XSS的类型

XSS 分为存储型、反射型、DOM型


存储型

存储型XSS,也称为持久性XSS,常见于带有用户保存数据的网站功能,如评论、私信等,是最危险的一种跨站脚本,因为不需要用户手动触发,当攻击者提交了 XSS 的代码,会被服务端保存在数据库中,当所有用户访问页面时会触发 XSS ,从而被攻击

攻击步骤为:

  1. 攻击者注入 XSS 代码,服务器将其保存在数据库中
  2. 用户登录目标网站,服务器将页面信息和 XSS 脚本一起返回
  3. 客户端解析代码,包括 XSS 脚本代码,这时 XSS 代码会被执行
  4. 恶意代码会向攻击者的恶意服务器发起请求,攻击者就可以从自己的恶意服务器读取用户数据,或者冒充用户的行为,调用网站接口执行操作

反射型XSS

反射型XSS,也称为非持久性 XSS ,常见于通过 URL 传递参数,攻击者结合多种手段引诱用户点击打开恶意的 URL ,从而获取用户的 cookie 信息等,一般会出现在搜索页面

攻击步骤为:

  1. 攻击者构造带有恶意代码的 URL ,引诱用户打开
  2. 用户打开恶意链接,访问了正常服务器
  3. 服务器将XSS与页面信息返回给客户端
  4. 客户端解析页面信息和XSS脚本,执行XSS后请求恶意服务器
  5. 攻击者获取用户数据

DOM型XSS

DOM型XSS,与反射型原理类似,但是不需要经过后端代码处理,只是在前端 js 可能产生的漏洞

攻击步骤为:

  1. 攻击者构造带有恶意代码的 URL ,引诱用户打开
  2. 用户打开恶意链接,访问了正常服务器
  3. 服务器将 XSS 与页面信息返回给客户端
  4. 客户端解析页面信息和 XSS 脚本,前端 js 取出恶意代码并执行
  5. 恶意代码获取用户数据,或者冒充用户行为调用接口

三者区别

存储型XSS 的恶意代码存在数据库中,反射型存在 URL 中,DOM型存在数据库、前端存储或者 URL 中,DOM型属于前端的漏洞,其他两种属于服务端的漏洞。

综上存储型的危害最大,只要用户访问了该页面就会遭受攻击,其他两种需要引诱用户点击恶意链接

防御方法

  • 设置 Cookie 的 HTTP Only 属性(设置 cookie 可不可读),客户端的 js 脚本就不能获取 cookie 信息
  • 对用户提交的所有内容进行过滤,过滤掉会导致脚本执行的内容,对输出的内容进行 html 编码
  • 拼接 html 时,对尖括号、引号、斜杠等进行转义,想对各处插入点进行充分的转义,需要采用合适的转义库

CSRF攻击

什么是CSRF

Cross Site Request Forgery(跨站请求伪造),通过冒充用户身份对目标攻击网站执行某些操作

CSRF类型

GET型

当网站的某个功能是GET请求实现的,例如修改邮箱的功能,如果攻击者引诱用户打开带有修改成错误邮箱脚本的链接,浏览器会带着已生成的 cookie 对此发出GET请求,用户的邮箱就会被修改

POST型

攻击者构造一个带有提交表单功能的链接,当用户访问该页面时,点击了该链接,表单会自动提交,浏览器会带着本地的 cookie 进行相关的 POST 操作,例如购买商品等

攻击步骤为:

  1. 用户登录目标网站,在本地生成 cookie
  2. 攻击者引诱用户打开恶意网站
  3. 用户打开后,恶意网站要求访问目标网站,发出一个请求
  4. 根据该请求,浏览器带着 cookie 访问目标网站,从而实现冒充用户身份进行操作
    alt text

防御方法

  • 验证码:CSRF 攻击的过程,往往是在用户不知情的情况下构造了请求。而验证码强制用户必须与应用进行交互,才能完成最终请求,但是会影响用户体验
  • 在请求地址中添加 token 并验证:可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。
  • 利用好 Cookie 的 SameSite属性 ,设置好后第三方站点无法访问到你的 Cookie
  • 服务端验证请求来源:比如 Origin 或 Referer 字段记录了请求来源地址,这样就可以杜绝第三方站点请求源

XSS和CSRF区别

  • XSS 是代码注入的问题, CSRF 是 HTTP 问题
  • XSS 是没有过滤输入内容,导致浏览器执行了恶意代码, CSRF 是浏览器发送 HTTP 请求时自动带上 cookie
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值