Web开发的安全之旅 | 字节青训营笔记

261 阅读6分钟

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

Web开发的安全之旅行(基础原理篇)

1.web安全

web安全职责:保护服务器及其数据的安全、保护服务器和用户之间传递的信息的安全、保护web应用客户端及其环境安全。

Web安全主要有如下几大分类

  • XSS
  • CSRF(跨站请求伪造)
  • SQL注入
  • 命令行注入
  • DDos注入
  • 流量劫持

2.XSS(跨站脚本攻击)

XSS原理:它是指攻击者往web页面或url里插入恶意JavaScript脚本代码且应用程序对用户输入的内容没有过滤,那么当正常用户浏览该页面时,嵌入在web页面的恶意JavaScript脚本代码会被执行,从而达到恶意攻击正常用户的目的。如下图:

1659325231385.png


产生漏洞的两个条件:

  • 盲目信任用户的提交内容。
  • 把用户提交的内容转换为DOM并解析。

XSS的特点:

  • 通常难以从UI上感知(暗地执行脚本)
  • 窃取用户信息(cookie/token)
  • 绘制UI(例如弹窗),诱骗用户点击/填写表单

XSS攻击例子如下图:

1659325693756.png

1659325715384.png


XSS的分类

  • 反射型XSS:它是非持久型,参数型的跨站脚本。
  • 存储型XSS:它是将脚本代码写进数据库可以永久保存数据,危害最大。
  • DOM型XSS:与反射性相似,但是DOM是树形结构,利用DOM标签。

2.1-反射型XSS

反射型XSS原理:攻击者通过给别人发送带有恶意脚本代码参数的URL,当URL地址被打开时,特有的恶意代码参数被HTML解析、执行,从而达到攻击目的(获取用户信息,侵犯隐私)


反射型XSS特点:

  • 不涉及数据库
  • 从URL上攻击

解决方法:

  • Web页面渲染所有内容或渲染的数据必须来源于服务器
  • 不要从 URL,document.referrer,document.forms 等这种 DOM API 中获取数据直接渲染
  • 尽量不要使用 eval, new Function(),document.write(),document.writeln(),window.setInterval()window.setTimeout(),innerHTML,document.creteElement() 等可执行字符串的方法

原文链接:blog.csdn.net/qq_33551792…


2.2-存储型XSS

存储型XSS原理:一般存在与form提交表单之中,如留言,提交文本。攻击者利用XSS漏洞,将脚本内容经过正常功能提交进入数据库永久保存,当前端获得后端从数据库中读出的注入代码时,将其渲染执行


存储型XSS特点:

  • 恶意脚本被存储在数据库中

  • 访问页面->读数据==被攻击

  • 危害最大,对全部用户可见

      漏洞产生原因:
              POST请求提交表单没有经过转义直接入库
              后端从数据库取出数据没有转义直接输出给前端
              前端拿到后端数据后没有经过转义直接渲染
    

解决方法:

  • 后端入库前不要相信前端任何数据,统一将所有字符转义
  • 后端将数据输出给前段时统一进行转义
  • 前端进行渲染时,将从后端请求过来的数据统一转义处理

2.3-DOM型XSS

DOM型XSS原理:大部分浏览器都专门针对XSS进行转义处理,但也有很多方式可以绕过转义规则,比如web页面字符集不固定,用户输入非字符集字符,有时会绕过转义过滤规则。


存储型XSS特点:

  • 不需要服务器的参与
  • 恶意攻击的发起+执行,全在浏览器完成

解决方法:

  • 指定 ,用utf-8,而且标签闭合

3.CSRF

Cross-site request forgery(CSRF)原理: 用户登录了某网站A,并在本地记录了cookie,在没有退出该网站时(cookie有效的时间内),攻击者发送引诱网站B,B要求访问A,从而达到获取用户隐私。

CSRF特点:

  • 在用户不知情的前提下
  • 利用用户权限
  • 构造指定HTTP请求,窃取或修改用户敏感信息

解决方法:

  • 正确使用get(只用于查看,列举,展示等不需要改变资源属性的时候) post(用于form表单提交,改变一个资源的属性或做一些其他事情,如数据库增删改)和cookie
  • 非GET请求中,为每个用户生产一个cookie token
  • POST请求的时候使用验证码
  • 渲染表单的时候,为每个表单加一个 csrfToken,然后在后端做 csrfToken验证
  • 校验请求来源
  • 设置cookie samesite

原文链接:blog.csdn.net/qq_33551792…

CSRF例子(如下图):

1659339745026.png

4.SQL注入和命令行注入

SQL注入原理:程序没有有效的转义过滤用户的输入,使得攻击者成功向服务器提交恶意的SQL查询代码,使得程序将攻击者的输入作为查询语句一部分执行。

预防方法:

  • 严格限制web应用的数据库操作权限,给此用户提供仅仅能够满足其工作的最低权限
  • 后端代码检查输入数据是否符合预期,严格限制变量的类型,比如使用正则表达式进行匹配
  • 对进入数据库的特殊字符(’,",,<,>,&,*)进行转义处理
  • 应用上线前建议使用专业的SQL注入检测

命令行注入原理: 指的是攻击者能够通过 HTTP 请求直接侵入主机,执行攻击者预设的 shell 命令这往往是 Web 开发者最容易忽视但是却是最危险的一个漏洞之一。

5.DDOs攻击

DDos攻击原理:短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新请求。

DDos攻击特点

  • 直接访问IP
  • 任意API
  • 消耗大量带宽(耗尽)

DDo(如下图):

1659340951619.png

6.流量劫持

6.1-DNS劫持

DNS劫持原理:是将网络域名对应到真实计算机能够识别的IP地址,以便进一步通信。DNS劫持就是当用户通过某一个域名访问站点时,被篡改的DNS服务器返回的是一个钓鱼站点的IP,用户就被劫持到钓鱼网站,进而隐私泄露。

6.2-HTTP劫持

HTTP劫持原理:当用户访问某个站点时会经过运营商网络,不法运营商和黑厂勾结能够截获请求返回内容,并且篡改内容,然后再返回给用户,从而实现劫持页面,轻则插入小广告,重则直接串改成钓鱼网站骗用户隐私。

原文链接:www.ahwgs.cn/shenmeshiwe…

7.个人总结

这是继HTML、CSS、JS、前端设计模式和Web标准与前端开发学习后的第6天,今天主要讲的是Web开发的安全知识,我主要学习了在web开发中会遇到的各种漏洞,如(XSS、CSRF和各种数据劫持等知识)。对于我来说,我的个人基础比较差,对Web的开发安全知识都不是很清楚,所以我根据老师上课所讲的知识+课外查询的资料整理成了以上这篇文章,主要针对web前端涉及到的一些Web开发说话遇到的安全漏洞和解决方法,希望我的文章能让大家了解到web开发安全的基础知识,也希望能帮助到大家,谢谢!