Web开发安全|青训营笔记

141 阅读4分钟

这是我参加[第五届青训营]伴学笔记创作活动的第10天

本堂课程重要内容

  • 了解从「攻击者」的角色的安全问题的危害和技术
  • 了解从「防御者」的角色的安全问题的解决方案

OWASP Top10

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

漏洞简述: 在输入框中插入恶意脚本在用户浏览网站时不知情进行攻击可能导致隐私泄露或作为挖矿的机子 image.png 漏洞之"洞" 形成XSS攻击,攻击者主要利用开发者盲目信任用户提交和直接将用户提交的字符串转化为dom
漏洞特点 通常难以从UI上感知(暗地执行脚本);窃取用户信息(如cookie/token);绘制UI(eg.获奖弹窗),诱骗用户点击/填写表单
漏洞分类

  • Stored XSS存储型-恶意脚本存储在数据库中,只要访问页面后需要读取数据就相当于被攻击了,该类攻击危害最大,对全部用户可见
  • Reflected XSS反射型-不涉及数据,从URL的参数后面跟的值上攻击
  • DOM-based XSS基于dom-不需要服务器参与,恶意攻击发起和执行全在浏览器完成
  • Mutation-based XSS-利用浏览器渲染DOM 的特性(不同浏览器有自己独特渲染机制)。按照不同浏览器进行区别攻击

这两种XSS类型的区别:完成注入脚本的地方不同 image.png

解决方案
1.现成工具

  • 前端-主流框架(vue,react等)都默认防御,google-closure-library
  • 服务端(Node)-DOMPurify

2.业务需求涉及使用以下场景所对应的解决方案

  • string->dom:在使用DOMParser时需要先转译string
  • 上传svg,需要先做图片扫描
  • blob动态生成script,不要做自定义跳转行为 image.png
  • 允许用户自定义样式 image.png

Same-origin Policy同源策略

  • 协议
  • 域名
  • 端口
  • Contetnt Security Policy(CSP) 哪些源(域名)被认为是安全的,来自安全源的脚本可以执行,否则直接抛错,此外对eval标签+inlinescript内联说No,直接报错

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

漏洞简述: 在用户不知情的前提下利用用户权限(cookie),构造指定HTTP请求,窃取或修改用户敏感信息 get-a,img,表单

image.png 通过Origin+Referrer判断请求来源是否合法外,还有通过token判断,从合法页面来判断是否请求合法,然后服务器标记 image.png 例子:iframe攻击-解决:X-Frame-Options:DENY/SAMEORIGIN CSRF anti-pattern反公式
SameSite Cookie策略:避免用户信息被携带,限制cookie域名与当前页面域名是否匹配
特殊情况:依赖cookie的第三方服务-设置Set-Cookie:SameSite=None; Secure;

SameSiteCORS
Cookie发送资源读写(HTTP请求)
domain vs 页面域名资源域名 vs 页面域名
"我跟你说个事儿,出这屋我可就不认了"白名单

image.png 解决方案 node-生成一个专门防御CSRF的中间件,不能case by case

Injection注入攻击

注入攻击可能会执行恶意命令,读取或修改重要文件内容 漏洞分类

  • SQL注入 image.png
  • 命令行注入cli(eg.convert-cli)
  • 系统命令 image.png

严格而言SSRF服务器伪造请求不是注入,但原理类似 image.png 解决方案 找到项目查询SQL的地方,使用prepared statement预处理语句 最小权限原则,不能sudo or root的尽量不用 建立允许名单+过滤 对URL类型参数进行协议、域名、ip等限制

Denial of Service(DoS)

漏洞简述 通过某种方式(构造特定请求),导致服务器资源被显著消耗来不及响应更多请求,导致请求挤压,进而雪崩效应。

正则表达式的贪婪模式

image.png 例子:ReDoS基于正则表达式的DoS,通过贪婪模式不断匹配回溯,使得响应时间不断上升和接口吞吐量不断下降 解决方案 完善代码review的工作,避免写出贪婪模式的代码 代码扫描工具+正则性能测试 拒绝用户提供的使用正则

Distributed DoS(DDoS)

漏洞简述短时间内,来自大量僵尸设备的请求流量,服务器不能及时时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新记请求。

image.png 直接访问IP地址,主要消耗带宽 例子:Flood洪水攻击(三次握手大量TCP导致第三次握手没能完成而此时达成服务器最大连接次数却无法释放) 解决方案

image.png

中间人攻击

基于传输层 漏洞之"洞" image.png 解决方案 HTTPS-特性:可靠性(加密,避免明文传输);完整性(MAC验证,防篡改);不可抵赖性(数字签名)

image.png HTTP Strict-Transport-Security(HSTS):将HTTP主动升级到HTTPS,前提是需要有有一次HTTPS的请求 Subresource Integrity(SRI):防止静态资源被劫持篡改 feature policy或permission policy

image.png

推荐读物