[web开发安全 | 青训营笔记]

139 阅读5分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 11 天

一、本堂课重点内容:

  • web安全
  • 攻击篇
  • 防御片

二、详细知识点介绍:

web安全简介

安全问题十分常见,小到个人账号被盗、个人信息泄露,大到公司数据泄露、服务器被攻击等等

会危害:

  • 用户(隐私)
  • 公司(利益)
  • 程序员祭天加班修bug

攻击

Cross-Site Scripting (XSS)

利用恶意脚本注入网站,访问网站时执行

会造成隐私信息泄露、设备被利用于挖矿等

特点:

  • 难以从UI上感知(暗地执行)
  • 窃取用户信息(cookie/token)
  • 绘制UI,诱骗用户输入信息

存储型XSS

恶意脚本被存在数据库中

访问页面就读取数据,相当于被攻击

对所有用户可见、危害最大

反射型XSS

不涉及数据库

从URL攻击

基于DOM的XSS

不需要服务器端参与

恶意攻击的发起和执行,都在浏览器中完成

Mutation-based XSS

利用浏览器渲染DOM特性

不同浏览器进行区别攻击

 <noscript><p title="</noscript><img src=x onerror=alert(1)>">

"平平无奇"的p标签title属性在chrome中会被渲染成

 <div>
   <noscript><p title="</noscript>
   <img src="x" onerror="alert(1)">
   "">"
 </div>

由于img便签中src属性不符合规范,触发onerror事件,回调,触发,从而完成XSS攻击

最难防御的一种

跨站伪造请求(CSRF)

在用户不知情的情况下利用用户权限(如cookie),构造指定HTTP请求,窃取或修改用户敏感信息

Injection(注入)类

SQL 注入

在请求时注入了恶意SQL参数,SQL参数到达服务器后会获取数据修改数据等(如删库跑路)

CLI

OS command

注入修改服务器的命令行等,可能危害服务器数据甚至导致服务器崩溃

Server-Side Request forgery(SSRF)服务器端伪造请求(类injection攻击)

除了删除数据,读取和修改数据危害也很大

暴露重要隐私文件

DoS

通过某种方式,导致服务器资源被显著消耗,来不及响应其他请求,导致请求挤压,进而雪崩

可以看作是利用攻击性请求占用服务器资源使服务器崩溃的一种攻击方式

正则表达之贪婪模式(尽可能多匹配)

基于正则表达式的DoS:

产生回溯行为,不断贪婪匹配

DDoS

最常见的DoS攻击,短时间内大量请求,服务器并不能及时响应,导致请求堆积,进而雪崩

《量大管饱》

主要是消耗带宽

耗时的同步操作、数据库写入、SQL join、文件备份、循环执行等

传输层--中间人攻击

在浏览器与服务器之间插入

如恶意webview、路由、ISP

被攻击的因素:明文传输、信息篡改不可知、无身份验证

攻击行为:窃取信息、修改请求等

防御篇

对于XSS:

不要信任用户提交内容

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

对应有现成工具:

前端:

  • 主流框架默认防御XSS
  • google-closure-library

服务端(Node)

  • DOMPurify

完成一些字符串转译

但有些用户需求:必须动态生成DOM

  • 注意对string进行转译
  • 对svg进行扫描
  • 不要让用户做自定义跳转链接

同源策略

协议域名端口全部一致才叫同源

内容安全策略(CSP)

  • 定义哪些域名安全
  • 对于安全源的脚本可直接执行,否则报错

比如设置script的标签必须同源才执行,从域名角度防止脚本注入

CSRF防御

限制请求来源就可以限制伪造请求

token

标记验证token(和具体用户绑定)

过期时间:前向保密

iframe攻击:是同源请求

X-Frame-Options:对于iframe设置拒绝同源请求

anti-pattern

避免偷懒行为,划分开GET和POST的接口

避免用户信息被携带:SameSite Cookie

cookie只能为我所用,第三方cookie不可用

依赖于Cookie的第三方服务:单独设置

SameSite 对比 CORS

SameSiteCORS
cookie发送资源读写(http请求)限制
domain验证页面域名资源域名验证页面域名
只与当前页面映射有关白名单机制

防御CSRF

做一个中间件Middlewares

Injection防御

找到查询SQL处

prepared statement:提前编译SQL,使注入攻击不能完成

除了SQL外

还有

  • 最小权限原则:不要赋予sudo | root 权限
  • 建立白名单机制+过滤机制
  • 对URL参数类型进行限制,避免攻击者进入内网

DoS

避免贪婪匹配

代码扫描

不使用用户提供的正则

DDoS

流量治理:负载均衡、流量识别、过滤攻击流量,CDN、API网关

快速自动扩容以承载徒增的流量

非核心服务降级,分出更多的计算资源

传输层--防御中间人

HTTPS:

  • 可靠性:加密
  • 完整性:MAC验证、加密信息带有哈希值,用于验证
  • 不可抵赖性:数字签名
TLS握手

非对称加密混合对称加密

HSTS

将HTTP主动升级成HTTPS,需要先进行一次HTTPS访问

SRI

静态资源被劫持?

-> 使用hash值验证

Permission Policy

限制页面不能调用敏感的权限

小结

安全无小事

使用的依赖可能是最薄弱的一环

保持学习心态

三、课后个人总结:

今天的课程主要是讲解了web安全相关的知识。老师用一个简单的google搜索展示了web安全事件是与我们生活密切相关的,在这个几乎离不开互联网的时代,web安全无疑是虽不起眼但却很重要的一环。本节课主要介绍了几种常见的攻击点以及其对应的防御方式,正所谓知己知彼百战不殆,只有真正去了解攻击的方法,攻击的目标及薄弱的地方,才能更好的去应对。

如有错误欢迎指出,谢谢。