前言
前段时间项目漏洞频频被白帽子利用,所以老板们要求把所有服务代码都检查一遍,老板们很急,被要求连续加了几天班看了几万行代码,差点猝死在键盘前。针对常见漏洞进行了一些学习,来写点总结加强记忆。
1. 目录穿越
漏洞简介
通过使用
../等绝对或者相对路径,跳出期望路径对文件进行越权读写操作,配置文件、源代码甚至整个服务器的文件都能被任意读写
防御策略
根本原因是使用了用户输入作为文件名进行读写操作
- 不要使用输入作为文件名
- 实在要用做好字符限制(纯字母或数字作为文件名)
2.上传漏洞
漏洞简介
上传PHP、ASP等可执行文件时,可以绕过web应用限制,读取到整个服务器的文件或者执行任意命令
防御策略
- 设置上传文件白名单
- 对文件类型进行校验
- 上传的文件转存到例如cos
- PHP 非常容易实现
一句话木马,使用PHP注意
3. SSRF-服务端请求伪造
漏洞简介
根本原因:服务端执行了用户传来的http请求,这些请求可以被埋藏在各种可能的地方,例如前端传来的头像url、svg描述符、m3u文件等
防御策略
- 对前端传入的url设置域名白名单
- 上传文件白名单过滤
- 服务端http请求设置域名白名单
4. CSRF-客户端请求伪造
漏洞简介
用户浏览器cookie被第三方劫持(只能使用,不能解析到内容)伪装用户发送http请求。也就是说需要用户被攻击
防御策略
- 校验是真·用户发起的请求,例如请求带上token服务端校验,token不能放在cookie
- 重要数据的写入要求输入验证码,GET不写入数据
- 双重cookie校验
5.XXS-跨站脚本攻击
漏洞简介
恶意代码被注入执行
- 反射型XSS:一次性执行代码,需要引导用户点击交互
- 持久型XSS:恶意代码被储了,下次渲染时执行代码
- DOM-Base型:利用.innerHTML、.outerHTML、document.write()操作dom
防御策略
- 对输入代码xss敏感过滤
- DOM 中的内联事件监听器,如
location、onclick、onerror、onload、onmouseover等, 标签的href属性,JavaScript 的eval()、setTimeout()、setInterval()等,都能把字符串作为代码运行。注意检查是否有用户输入内容。