安全学习笔记之Web安全(二)
0x00 前言
在计算机世界中,一个东西习惯分成不同的层级,来模块化和解耦系统,这也就意味着一个东西有不同的层,比如计算机网络它有 OSI 七层模型和 TCP/IP 五层模型等,计算机体系结构从上到下可大致分为应用层,操作系统层,微指令架构层,硬件层等等,像其他的如操作系统和编程语言也是一样的道理,可见抽象和封装就是计算机世界的基本原则。
同样,我们在谈信息安全的时候,信息安全也是有不同的层级的。上一篇文章中我们说过了,安全的本质是数据,而随着数据的流动,就分层了不同的层级。当数据在网络中流动的时候,它是网络安全;当数据流经到了 Web 容器和 Web 应用的时候,它是 Web 安全;当数据流经到操作系统是,它是主机安全。
在了解了这些后,我们针对不同的层有不同的学习方向,而今天我记录的学习笔记是 Web 安全的学习笔记。在我们了解具体的漏洞前,需要抱着一切用户输入皆不可信的思想,很多漏洞利用本质就是把用户的输入的数据当做代码执行。
0x10 常见 Web 漏洞
0x11 XSS
原理:用户的输入被当做 js 代码执行了
分类:
- 反射型: 恶意代码输入直接被输出执行,一般在前后端一体的架构中,服务端改变了返回的页面代码
- 存储型: 恶意代码被提交存储在数据库中,可以被加载执行
- DOM型: 恶意代码提交到后端服务器后,前端代码根据后端服务器返回的内容通过 js 修改了 htm 页面,达到了插入脚本的目的,常见于前后端分离的项目。
危害: - 窃取 cookie
- 钓鱼操作
- 记录用户行为
- 未授权操作
防护: - 验证输入输出
- 编码
- 白名单过滤
- CSP(Content Security Policy)
0x12 SQL注入
原理:构造恶意 SQL 语句参数,导致 SQL 语句被篡改
分类:参数类型可分为数字型和字符型,而根据回显结果可以分为回显注入,报错注入和盲注
危害:篡改窃取数据
防护:预编译语句,验证输入,使用存储过程
0x13 CSRF
原理:伪造用户操作
防护:csrf token,二次验证,防止参数被攻击者猜解
0x14 SSRF
原理:通过 url 控制服务器去访问其他服务器
防护:白名单限制,协议和资源限制,请求端限制
0x15 反序列化漏洞
原理:通过在数据中嵌入自定义代码提交到服务器,服务器反序列化过程中执行了代码,来控制整台服务器
防护:限制序列化和反序列化的类,RASP 检测
0x16 信息泄露
原理:注释、异常、返回信息或者代码泄露
防护:模糊处理,关闭异常打印和错误,监控 github 等网站
0x17 插件漏洞
原理:第三方插件存在漏洞
防护:第三方插件监控和检测
0x18 上传漏洞
原理:上传图片或者 webshell
防护:文件校验
0x20 小结
web 安全的漏洞有很多,这里也只记了个大概,总之漏洞的原理就是程序把数据当做代码执行,而我们的应对防止无非是验证数据和过滤等等,还是那句话,一切输入皆不可信。