Web开发安全笔记 | 青训营笔记

238 阅读4分钟

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

Web安全开发

攻击者

攻击手段

XSS-跨站脚本攻击

在开发维护页面通过一种方式把恶意脚本注入进来,在用户访问页面时执行攻击。

XSS主要利用了

  • 开发者盲目信任用户的提交内容
  • 直接把用户提交的字符串(string)转换成Dom

特点

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

几种XSS攻击类型:

  • Stored XSS
    • 恶意脚本被存在数据库中
    • 访问页面→读数据—被攻击
    • 危害最大,对全部用户可见
  • Reflected XSS
    • 不涉及数据库
    • 从url上攻击
  • DOM-based XSS
    • 不需要服务器的参与
    • 恶意攻击的发起 + 执行,全在浏览器上完成
  • Mutation -based XSS
    • 利用了浏览器渲染DOM的特性(独特优化)
    • 不同浏览器会有区别(按浏览器进行攻击)

CSRF-跨站轨道请求

在用户不知情的前提下,利用用户权限(cookie),构造指定HTTP请求(发送一个页面),窃取或修改用户敏感信息。

常见请求方式:

GET:构造a标签、img标签等完成请求

beyond GET: 构HTML表单

Injection-注入攻击(SSRF原理类似)

SQL注入攻击:

HTTP请求SQL参数时恶意注入-->传送到serve服务器读参数时生成SQL代码,并运行SQL代码(恶意SQL注入) --> 完成攻击者的代码操作,例如获取其它数据、修改或删除数据。

其它方式
  • CLI
  • OS command

Server-Side Request Forgery 服务器端伪造请求

删除:接受用户没有进行过滤的options参数,修改options命令,直接删除。

读取、修改:暴露重要文件;把网站流量转发到真实第三方,第三方扛不住新增流量导致第三方服务挂掉。

访问callback === 暴露内网信息

DOS-Denial of Service-服务拒绝、构造特定请求

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

贪婪模式

指写正则表达式时使用问号“?”,例如:

const greedyRegExp = /a+/;     //贪婪模式,有多少匹配多少
const nonGreedyRegExp = /a+?/;  //匹配到一个就行
const str = "aaaaaa";

ReDoS:

利用贪婪模式

回溯:n次不行则匹配n-1次,一直回溯循环。

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

传输层-中间人攻击

在浏览器和服务器中间插一个“中间人”进行沟通,中间人可以窃取信息、修改请求和返回。“中间人”可以是恶意的浏览器页面、路由器、ISP等。

中间人主要利用了:

  • 明文传输
  • 信息篡改不可知
  • 对方身份未验证

防御者

防御手段

XSS

永远不信任用户的提交内容,

  • 不要将用户提交内容直接转换成 DOM。
  • string->DOM,进行字符串转移
  • 对svg上传进行扫描

现成工具:

  • 主流框架默认防御XSS
  • google-closure-library
  • 服务器端(Node): DOMPurify:完成字符串转移,避免XSS攻击

Same-origin policy-同源策略:协议、域名、端口都要同源。
CSP:

  • 哪些源(域名)被认为是安全的
  • 来自安全源的脚本可以执行,否则直接抛错
  • eval + inline script 拒绝

CSRF

判断请求是否来自于合法来源,如果是异常来源则限制请求来源、拒绝请求。

同源请求中,GET +HEAD 不发送

方法

  • CSRF——token:先有页面,后有请求
  • SameSite Cookie:避免用户信息被携带

做一个中间件专门防御CSRF,整个webapp都能完成对CSRF的防御

Injection

  • 找到项目中查询SQL的地方
  • 使用prepared statement
  • 最小权限原则,避免直接sudo root
  • 建立允许名单+过滤,避免rm等高危指令
  • 对URL类型参数进行协议、域名、ip等限制,避免访问内网

DoS

Regex DoS:

  • 完善Code ReView,避免贪婪匹配方式
  • 代码扫描+正则性能测试
  • 拒绝使用用户提供的使用正则

DDoS:

流量治理

过滤

  • 负载均衡
  • API 网关

抗量

  • CDN
  • 快速自动扩容
  • 非核心服务降级

传输层-防御中间人

主要是防御中间人

HTTPS-TLS

  • 可靠性:加密
  • 完整性:MAC验证
  • 不可抵赖性:数字签名

Feature Policy/Permission Policy

指定页面可以使用哪些功能,例如:

  • camera相机/摄像头
  • microphone麦克风/监听声音
  • autoplay自动播放

总结

技术不断更迭,通过本节课的学习发现了web安全的重要性及攻击与防御的相关知识,也通过课程明白了不断学习的重要性。不断学习才能跟上技术的更迭和发现更多解决问题的办法。