开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第32天,点击查看活动详情
XSS攻击
一、XSS 跨站点脚本
xss 攻击,跨站脚本攻击,通过给网页注入 js 代码,代码执行后会对网页进行攻击,比如盗取 cookie、sessionStorage 等。
所以用来维持登录状态的 cookie 一般会开启 http-only ,进而避免 xss 攻击用 document.cookie 访问到。
1、反射型XSS
一般是诱导用户点击某个链接,而攻击脚本会直接放在请求 url 上,最后又返回给页面,这个过程类似反射,所以叫反射型 XSS,也叫非持久型 XSS。
2、存储型XSS
存储型 XSS,一般是通过页面的输入框去注入 js 脚本代码到后端的数据库,然后页面下次再拉取数据时,会直接拉取到 <script> 脚本,然后直接解析执行。
它比反射型 xss 危害更大,因为它是将攻击代码存储到数据库,而数据库里的数据可能是全部用户都能请求的,也就是说可能对全部用户产生危害。
3、DOM型XSS
DOM型攻击实例:
(52条消息) 通过DVWA学习DOM型XSS_Mi1k7ea的博客-CSDN博客_dvwadom型xss
[(52条消息) 关于DOM型XSS的深入解析(收藏)_告白热的博客-CSDN博客_什么是dom型xss](
前端页面使用了 innerHTML、outerHTML 进行 DOM 插入时,不会对 script 标签进行转义,所以一旦通过这些 api 插入的模板字符被注入 script 脚本,就会产生攻击。
4、如何解决xss注入问题:
xss 攻击的攻击目的很多,我们可以对不同目的的攻击进行预防。比如,xss 攻击可能会通过 js 盗取你的 cookie,那么提前把保留登录态的 cookie 设为 http-only,避免可以通过 js 通过 document.cookie 进行访问。
另外,还有一种常见的预防操作就是,对 scrpit 标签进行转义。无论是前端还是后台,对于一些可能要插入到页面的字符串都进行转义,避免被插入 scrpit 脚本而去执行。
CSRF攻击
CSRF(Cross-site request forgery)跨站请求伪造:攻击者诱导受害者进⼊第三⽅⽹站,在第三⽅⽹站中,向被攻击⽹站发送跨站请求。利⽤受害者在被攻击⽹站已经获取的注册凭证,绕过后台的⽤户验证,达到冒充⽤户对被攻击的⽹站执⾏某项操作的⽬的。
⼀个典型的CSRF攻击有着如下的流程:
- 受害者登录 a.com ,并保留了登录凭证(Cookie)
- 攻击者引诱受害者访问了 b.com
- b.com 向 a.com 发送了⼀个请求: a.com/act=xx 浏览器会默认携带a.com的Cookie
- a.com接收到请求后,对请求进⾏验证,并确认是受害者的凭证,误以为是受害者⾃⼰发送的请求
- a.com以受害者的名义执⾏了act=xx
- 攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让a.com执⾏了⾃⼰定义的操作