前端面经之常见的网络攻击以及如何防御

1、CSRF攻击

1.1、什么是CSRF攻击

CSRF即Cross-site request forgery(跨站请求伪造),简单来说,就是攻击者在用户不知情的情况下盗用了你的身份(比如说cookie),以你的名义发送请求,进行一些操作,比如说:发消息、转账等,而对服务器来说这些请求又是合法的,所以说可能会造成个人信息的泄露、财产的损失等。

1.2、CSRF攻击的过程

第一步,用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;

第二步,在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;

第三步, 用户未退出网站A之前,在同一浏览器中,打开一个新的tab页访问网站B;

第四步, 网站B接收到用户请求后,返回一些攻击性代码,通过这个代码,在用户不知情的情况下携带Cookie信息,向网站A发出请求,比如说这个请求是获取用户信息的。

第五步,网站A根据cookie,会认为是用户C发送的该请求,从而导致该请求被执行,进行给用户C造成个人信息或财产的损失。

原理:
在浏览器中,所有的cookie,可以在任意一个标签页中被访问(没有设置http-only为true的情况下)(不论是否跨域)

1.3、如何防御CSRF攻击

1.验证 HTTP Referer 字段:由于是从其它网站发送的请求,所以可以通过验证请求头的Origin、Referer来验证发送请求的站点。
2.设置http-only:true,禁止cookie被浏览器通过js访问到
3.验证Token:浏览器发送请求时,携带token,因为token存放在sessionStorage中,不会被其它网站所窃取到。

2、XSS攻击

2.1、XSS攻击是什么

XSS即Cross Site Scripting(跨站脚本攻击),攻击者通过各种方式将恶意代码注入到用户的页面中,这样就可以通过脚本进行一些操作。

例如:

在评论区植入JS代码,使得页面被植入广告

2.2、XSS攻击有哪些类型

1.存储型XSS攻击:也叫持久型XSS,主要将恶意代码提交存储在服务器端,当目标用户访问该页面获取数据时,恶意代码会从服务器返回到浏览器做正常的HTML和JS解析执行,这样XSS攻击就发生了。
存储型 XSS 一般出现在网站留言、评论等交互处。

2.反射型XSS攻击:一般是攻击者通过特定手法(如电子邮件),诱使用户去访问一个包含恶意代码的 URL,当用户点击后,恶意代码会直接在用户的浏览器执行。
反射型XSS通常出现在网站的搜索栏、用户登录口等地方,常用来窃取客户端 Cookies 。

3.DOM型XSS攻击:指通过恶意脚本修改页面的 DOM 结构,是纯粹发生在客户端的攻击。
DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞。

2.3、如何防御XSS攻击

1.针对存储型XSS攻击,对输入内容的特定字符进行编码
例如对表示 html标记的 < > 等符号进行编码
2.针对反射型XSS攻击,在 cookie中设置 httpOnly:
可以防止客户端通过document.cookie读取 cookie,此 HTTP头由服务端设置。
3.针对反射型XSS攻击,在输出 URL参数之前,要先对URL进行 URLEncode操作
4.开启白名单,阻止白名单以外的资源的加载和运行
5.后端接口也需要对关键字符进行过滤。

3、token为什么就比cookie安全

  • cookie是什么
    登陆后,后端生成一个sessionid放在cookie中返回给客户端,并且服务端一直记录着这个sessionid,客户端以后每次请求都会自动带上这个sessionid,服务端通过这个sessionid来验证身份之类的操作。所以别人拿到了cookie等于拿到了sessionid,就可以完全替代你。
  • token是什么
    登陆后,后端会返回一个token给客户端,客户端将这个token存储起来,然后每次客户端请求都需要开发者手动将token放在header中带过去,服务端每次只需要对这个token进行验证就能使用token中的信息来进行下一步操作了。
  • 对于xss攻击来说,cookie和token没有什么区别。但是对于csrf来说就有区别
    1、对于xss攻击,不管是token还是cookie,都能被拿到,没有什么区别。
    2、对于csrf来说就有区别,例子如下:
cookie:在浏览器中,所有的cookie,可以在任意一个标签页中被访问(没有设置http-only为true的情况下)(不论是否跨域)
token:存放在sessionStorage中,仅在浏览器的当前窗口中可以被访问到
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值