Web开发安全 |青训营笔记

146 阅读4分钟

1.jpg

这是我参与「第四届青训营」笔记创作活动的第4天

从两个角度看web安全

  • 假如你是一个hacker--攻击
  • 假如你是一个开发者--防御
  • 一、攻击篇

    1.跨站脚本攻击(XSS)

  • 什么是跨站脚本攻击(XSS)
  • 用户在浏览网站、使用即时通讯软件、甚至在阅读电子邮件时,通常会点击其中的链接。攻击者通过在链接中插入恶意代码,就能够盗取用户信息。攻击者通常会用十六进制(或其他编码方式)将链接编码,以免用户怀疑它的合法性。网站在接收到包含恶意代码的请求之后会产成一个包含恶意代码的页面,而这个页面看起来就像是那个网站应当生成的合法页面一样。许多流行的留言本和论坛程序允许用户发表包含HTML和javascript的帖子。假设用户甲发表了一篇包含恶意脚本的帖子,那么用户乙在浏览这篇帖子时,恶意脚本就会执行,盗取用户乙的session信息。

  • 跨站脚本攻击(XSS)的攻击类型
    1. 持久型跨站:最直接的危害类型,跨站代码存储在服务器(数据库)。
    2. 非持久型跨站:反射型跨站脚本漏洞,最普遍的类型。用户访问服务器-跨站链接-返回跨站代码.
    3. DOM跨站(DOM XSS):DOM(document object model文档对象模型),客户端脚本处理逻辑导致的安全问题。

  • 跨站脚本攻击(XSS)的攻击特点
    1. 通常难以从UI上发现,因为是在暗地里执行脚本
    2. 可以窃取用户信息( cookie、 token)
    3. 还可以绘制UI(如弹窗),诱骗用户点击

    2.跨站请求伪造(CSRF)

  • 什么是跨站请求伪造(CSRF)
  • 跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。

    3.跨站请求伪造(CSRF)与跨站脚本攻击(XSS)的区别

  • XSS 利用的是用户对指定网站的信任
  • CSRF 利用的是网站对用户网页浏览器的信任
  • 2.跨站请求伪造(CSRF)的特点

  • 在用户不知情的前提下
  • 利用用户权限(cookie)
  • 构造HTTP请求,窃取或修改用户敏感信息
  • 二、防御篇

    1.跨站脚本攻击(XSS)

    1. 方案:
    2. 永远不信任用户的提交内容

      不把用户提交内容直接转换成DOM

    3. 现成工具:
    4. 前端:

      主流框架默认防御XSS

      google-closure-library

      服务端(Node):
      DOMPurify

    2.跨站请求伪造(CSRF)

    添加校验token
    由于CSRF的本质在于攻击者欺骗用户去访问自己设置的地址,所以如果要求在访问敏感数据请求时,要求用户浏览器提供不保存在cookie中,并且攻击者无法伪造的数据作为校验,那么攻击者就无法再运行CSRF攻击。这种数据通常是窗体中的一个数据项。服务器将其生成并附加在窗体中,其内容是一个伪随机数。当客户端通过窗体提交请求时,这个伪随机数也一并提交上去以供校验。正常的访问时,客户端浏览器能够正确得到并传回这个伪随机数,而通过CSRF传来的欺骗性攻击中,攻击者无从事先得知这个伪随机数的值,服务端就会因为校验token的值为空或者错误,拒绝这个可疑请求。