关于Web开发的安全 | 青训营笔记

251 阅读6分钟

关于Web开发的安全 | 青训营笔记

这是我参与「第四届青训营 」笔记创作活动的的第1天,之前的笔记私底下记得乱七八糟不好意思放上来了,于是从今天正式开始

关于Web安全

本堂课的重要内容

1,Web安全为什么重要 2,常见的网络攻击手段

为什么需要重视web安全

安全问题在web开发的历史中是常见的,会造成经济损失,信息泄露等,乃至于不可估量严重性的危害,主要危害对象有用户、公司、程序员等,因此重视Web开发的安全工作是很有必要,并且值得进行投入的。

常见的攻击手段

Cross-Site Scripting(XSS)

原理:

通过网页开发时,对用户输入信息过滤不足,将恶意代码注入网页中。恶意代码通常是JavaScript,但也包括Java、VBScript、ActiveX、Flash或者普通的HTML。

易遭受XSS攻击的对象

(1)用户输入的组件 (2)对用户输入没有严格的过滤

如何避免

作为开发者,不要完全信任用户的信息提交,并且对信息进行过滤

常见的攻击特点

(1)难以直接从UI上察觉 (2)使用cookie/token窃取信息 (3)使用弹窗等部件,引诱用户直接填入信息

Stored XSS

原理:

把恶意脚本存储到被攻击者的网站的数据库。其他人访问数据库中的恶意脚本代码后,浏览器执行恶意脚本,被攻击。

常见的攻击特点

(1)存储式攻击不止一次攻击,并且被攻击的人不止一个,影响范围大。

Rflected XSS

原理:

最常见的类型的XSS。漏洞产生的原因是攻击者注入的数据反映在响应中。一个典型的Rflected XSS包含一个带XSS攻击向量的链接(即每次攻击需要用户的点击) 恶意代码并没有保存在目标网站,由浏览器解析脚本。

常见的攻击特点

(1)不涉及数据库 (2)从URL上攻击

Dom-based XSS

原理:

Dom Based XSS漏洞是基于文档对象模型的一种漏洞,客户端的脚本程序可以通过DOM来动态修改页面内容,从客户端获取DOM中的数据并在本地执行。基于这个特性,就可以利用JS脚本来实现XSS漏洞的利用。

常见的攻击特点

(1)不需要服务器参与 (2)在浏览器完成攻击的发起和进行 (3)由于是前端DOM操作导致,很难留下痕迹

Mutation-based XSS

原理:

利用浏览器渲染DOM的特性,将其中发生的异常转化为攻击,使得发生错误。

常见的攻击特点

(1)利用了浏览器渲染DOM的特性 (2)根据浏览器的种类不同,攻击也存在区别

Cross-site request forgery(CSRF)

原理:

利用用户本来的权限,不经过本人的许可对信息进行非法操作。

常见的攻击特点

(1)用户往往不知情 (2)利用用户权限(cookie) (3)构造指定HTTP请求,窃取或修改用户敏感信息

injection

SQL injection

原理:

恶意在http请求上搭载SQL参数,服务器端读取参数后构成可运行的SQL语句,对数据库进行攻击。

其它的injection:

  • CLI
  • OS command
  • Server-Side Request Forgery(SSRF),服务端伪造请求

常见的injection目的

执行语句,读取,修改,

Denial of Service(DoS)

原理:

通过某种方式,如构造特定请求,大量消耗服务器资源,导致其无法响应更多请求或直接死机,进而导致请求挤压,引起雪崩效应。

ReDoS:基于正则表达式的DoS

原理:

攻击者大多利用回溯行为进行攻击。例如开发者的代码中有一个贪婪正则表达式,攻击者传入一个容易发生回溯的字符串进行攻击,这就会导致电脑响应时间增加,接口吞吐量明显降低,响应用户次数减少。

Distributed DoS(DDoS)

原理:

短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而发生雪崩效应,无法响应新请求。即不求能进行复杂的,无法解决的攻击,转而追求以数量促使服务器死机。

常见的攻击特点

(1)直接访问IP (2)任意API (3)消耗大量带宽

常见有;

  • SYN flood
  • 基于传输层的一种攻击——中间人攻击

关于防御

主题思想

永远不要盲目信任用户的提交内容 不要直接将用户提交内容转化为DOM

防御工具:

  • 前端:主要框架大多自带XSS防御 Google-closure-library
  • 服务端:DOMpurify

不得已的情况下:

  • String转DOM需要进行转义
  • 如果用户上传svg文件,需要进行过滤
  • 对于用户的自定义跳转链接需要检查
  • 自定义样式也同样

same-origin-policy(同源策略)

简单来说,HTTP请求同源可以,跨域不行

content-security-policy(CSP)

允许定义安全的信息源,也可以直接拒绝某些数据

针对CSRF的防御

  • 对请求进行验证,检查头部信息,是否为同源请求
  • 先有页面,后有请求--服务器对信息源进行标记,带上token并在后续进行检查
  • 针对同源的攻击,对其进行限制,X-Frame-Options:(DENY/SAMEORIGIN)限定只有同源页面才能加载某部件。
  • 将更新和获取不能放在同一个请求
  • Same-site cookie,将cookie限定为只有“我”能用。匹配域名。针对依赖第三方的cookie可以将属性设为none,但要标记secure

针对injection的防御

  • 提前找到SQL语句并进行预编译
  • 最小权限原则,避免使用root
  • 建立权限名单,使用过滤
  • 对于访问内网的操作,对URL,ip,域名,协议等进行限制

针对Regex-dos的防御

  • code review
  • 进行正则性能测试
  • 拒绝用户使用的正则

针对ddos的防御

  • 针对流量治理,如进行识别和过滤
  • 进行抗量处理,如扩容,对非核心服务降级等

针对传输层的防御

  • 使用HTTPS,有TLS作为安全保证。具有可靠性,完整性,数字签名具有不可抵赖性

今日的思考

自己做的小项目都还是没有经历过网络攻击的粗糙品,也没有思考过要如何去解决这些问题,今天听了老师讲课之后对网络攻击懂了很多,希望在之后的经历中把这些知识融会贯通。