• xss攻击与csrf攻击


    XSS攻击和CSRF攻击

    xss攻击

    什么是xss攻击

    xss(cross site scripting)跨站脚本攻击:让浏览器渲染dom的时候意外的执行了恶意的js代码

    攻击者在用户访问页面的时候,插入恶意的脚本,使用户加载并执行恶意代码,实现窃取用户信息等恶意行为

    下面看个简单的例子,加深一下了解:

    在这里插入图片描述

    这段代码就是点击确定的时候,将输入框中的内容保存到变量中,点击显示时将内容显示到页面

        
        

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    但是,当我们输入;然后点击确定,将输入框中的内容保存到变量中,再点击显示的时候就回执行我们输入的脚本,弹出 ”完了,芭比Q了“

    在这里插入图片描述

    这就是一种dom型 XSS 攻击

    攻击类型

    一、存储型攻击

    存储型 XSS 的攻击步骤:

    1. 攻击者将恶意代码(比如读取用户cookie,将他发送到黑客的服务器)上传或储存到漏洞服务器中
    2. 用户打开目标网站时,网站服务端将恶意代码从数据库取出,拼接在 HTML 中返回给浏览器。
    3. 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行。
    4. 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。

    触发条件:后端不过滤信息,并且前端不过滤直接展示

    场景、形式:这种攻击常见于带有用户保存数据的网站功能,如论坛发帖、用户评论、用户私信等。

    二、反射型攻击

    反射型 XSS 的攻击步骤

    1. 攻击者构造出带有恶意脚本的链接。
    2. 用户打开带有恶意代码的 URL链接,网站将xss正常页面返回到用户浏览器。
    3. 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行。
    4. 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。

    触发条件:用户点击了含恶意脚本的url,前端和后端对参数没有做处理

    反射型 XSS 漏洞常见于通过 URL 传递参数的功能,如网站搜索、跳转等。,由于需要用户主动打开恶意的 URL 才能生效,攻击者往往会结合多种手段诱导用户点击。

    场景、形式:反射型 XSS 一般是攻击者通过特定手法(如电子邮件),诱使用户去访问一个包含恶意代码的 URL,当受害者点击这些专门设计的链接的时候,恶意代码会直接在受害者主机上的浏览器执行;恶意脚本通过 URL 的方式传递给了服务器,而服务器则只是不加处理的把脚本“反射”回访问者的浏览器而使访问者的浏览器执行相应的脚本

    反射型与存储型 XSS 的区别:存储型 XSS 的恶意代码存在数据库里,反射型 XSS 的恶意代码存在 URL 里。

    三、dom型攻击

    DOM 型 XSS 的攻击步骤

    1. 攻击者构造出特殊的 URL,其中包含恶意代码。
    2. 用户打开带有恶意代码的 URL。
    3. 用户浏览器接收到响应后解析执行,前端 JavaScript 取出 URL 中的恶意代码并执行。
    4. 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。

    DOM 型 XSS 跟前两种 XSS 的区别:DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞,而其他两种 XSS 都属于服务端的安全漏洞。

    本文开始就是一个dom型的XSS攻击

    在使用 .innerHTML.outerHTMLdocument.write() 时要特别小心,不要把不可信的数据作为 HTML 插到页面上,而应尽量使用 .textContent.setAttribute()

      setTimeout(`alert(456)`);
    
    • 1

    DOM 中的内联事件监听器,如 locationonclickonerroronloadonmouseover 等, 标签的 href 属性,JavaScript 的 eval()setTimeout()setInterval() 等,都能把字符串作为代码运行

    如何预防XSS攻击

    对输入进行过滤:用户输入、url参数、请求参数等进行过滤

    对输出进行转义

    转义前转义后
    <$lt
    >:>
    //
    \\\
     function encodeForHTML(str, kwargs){     return ('' + str)
     .replace(/&/g, '&')
     
      .replace(/ < HEX=> < Entity=> <
     
      .replace(/>/g, '>')
     
      .replace(/"/g, '"')
     
      .replace(/'/g, ''')   // ' 不推荐,因为它不在HTML规范中
     
      .replace(/\//g, '/');
      }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    cookie设置http-only (由后端设置):那么js就无法拿到cookie

    输入内容长度控制:虽然无法完全防止 XSS 发生,但是可以增加攻击难度

    https://juejin.cn/post/6844903685122703367#heading-13

    CSRF攻击

    什么是CSRF攻击

    跨站请求伪造 (Cross-site request forgery),攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等

    攻击步骤:

    1》用户登录A网站,网站A产生cookie返回给浏览器

    2》在没有退出登录A的时候打开有问题的B网站

    3》B 新网站B收到用户请求之后返回一些攻击代码,并发出一个请求要求访问A网站(此时就可以携带cookie访问A网站)

    4》服务器不知道时A还是B发出来的,根据用户权限处理请求

    访问时自动发出请求,向目标网站发出请求

     
    
    • 1

    自动提交的表单

     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    本质上讲,XSS 是代码注入问题,CSRF 是 HTTP 问题

    预防措施:

    1》同源验证:HTTP中Referer字段,检查是不是从正确的域名访问过来,它记录了HTTP请求的来源地址

    2》token验证:在HTTP请求头中添加token字段,并且在服务器端建立一个拦截器验证这个token,如果token不对,就拒绝这个请求

    3》使用验证码:在表单中添加一个随机的数字或者字母验证码,强制要求用户和应用进行直接的交互

    普通的网站开发不需要特别担心CSRF漏洞,只需要在最后面设置一个拦截器来验证referer的值就可以了,非常便捷。但是这个方法也不是万无一失的,虽然referer是浏览器提供的,但是不同的浏览器可能在referer的实现上或多或少有自身的漏洞,所以使用referer的安全保证是通过浏览器实现的。使用token验证的方法要比referer更安全一些,需要把token放在一个HTTP自定义的请求头部中,解决了使用get或者post传参的不便性

  • 相关阅读:
    html + css + js 基础
    web前端期末大作业:基于HTML+CSS+JavaScript制作我的音乐网站(带设计报告)
    【计算机网络】IP协议第一讲(协议格式介绍)
    【分布式】高并发下如何防重?
    java学习--day8 (面向对象)
    Docker学习(4)—— 容器数据卷
    Mybatis-plus修改指定字段
    Go语言切片
    数据可视化(十一):Pandas餐饮信息表分析——交叉表、离群点分析,多维分析等高级操作
    Java 类集 习题
  • 原文地址:https://blog.csdn.net/weixin_50576800/article/details/126714885