服务端漏洞
第三方组件漏洞
- 一些第三方组件中存在某些漏洞,当我们调用这些第三方组件实现某些操作时,可能会引发漏洞
- 解决方案:
- Java项目可以使用dependency-check-maven检查项目引入的组件是否存在安全漏洞,dependency-check-maven会帮助检查当前项目引入的组件当前版本存在的漏洞并统计
SQL注入
- 在数据项中加入某些SQL语句关键字,这些SQL语句很可能在数据库写入或读取数据时得到执行
- 防护方式:
- 尽量不要基于DB的Raw方法拼接构造SQL语句,而应该使用预编译、ORM框架
- 使用ORM框架时,应该注意框架中的特性,可能存在不安全的写法导致的SQL注入问题。
- 在复杂场景一定要使用拼接SQL,需要对外部输入进行转义。
命令执行
- 代码中如果需要调用某个命令,此时会涉及命令拼接,此时
- 防护方式:
- 对动态的值尽可能设置白名单进行验证。
- 如果某些位置无法白名单,需要尝试对数据类型进行校验。
- 特殊字符黑名单的过滤,或者转义。
越权漏洞
-
越权:资源访问或操作时候主体权限没有进行校验就会造成越权问题,细分为:未授权、水平越权和垂直越权
- 未授权
- 水平越权
- 垂直越权
- 未授权
-
防护方式:
- 水平越权:涉及资源id尽量不要使用短id (遍历难度较小),同时最重要的—定要做好资源属主校验
- 垂直越权:如果是简单的场景,可以将接口在路由级别进行分组,对不同的API分组引入Middleware进行权限拦截, Middleware获取当前用户角色以确定是否可以访问此接口。
SSRF
-
SSRF又称服务端请求伪造攻击,指攻击者利用后端服务器为跳板,让后端服务向非预期网络地址(主要指内网地址)发出恶意请求,获取敏感信息或执行恶意操作。
-
防护方式:对url的host进行白名单过滤,获取对host解析的ip进行判定,是否是内网地址。
文件上传漏洞
- 防护方案:
- 限制文件类型:如果系统只需要图片类型,可以从服务端解析文件格式,限制只能传入特定的文件格式。
- 站库分离:应用部署的位置和上传的文件分离,一般可以使用TOS、OSS等进行文件存储。
- 防止图床:对图片访问链接进行限制,包括时间限制,访问身份限制等。
客户端漏洞
开放重定向
- 某些需要重定向到其他站点的功能,往往在参数中携带需要重定向的URL,但实际程序逻辑没有控制好重定向的范围,导致攻击者可以构造恶意链接,诱导用户重定向到恶意站点。
- 防护方案:对重定向严格进行白名单控制并正确校验匹配白名单
XSS
CSRF
- 跨站请求伪造(CSRF):允许攻击者诱导用户访问恶意链接,执行用户非预期执行的操作。
- 危害:用户执行敏感操作,如关注其他用户,或者更改账号的安全邮箱等。
主要方式是构造一个钓鱼网站,点击钓鱼链接后,会自动发送攻击方构造好的请求
SameSite Cookie 是一种 HTTP Cookie 属性,用于控制浏览器在跨站点请求时是否发送 Cookie。
Referer-based validation(基于 Referer 的验证)是一种网络安全措施,用于验证 HTTP 请求的来源是否合法。它通过检查请求头中的 "Referer" 字段来确定请求的来源页面是否与预期相符。
点击劫持
- 点击劫持(clickjacking)是一种在网页中将恶意代码等隐藏在看似无害或者存在诱导的内容(如按钮)之下,并诱使用户点击的手段,用户点击后往往会执行一些非预期的操作。
CORS跨域配置错误
- CORS:跨域资源共享(Cross-origin resource sharing),用以解决网页应用跨域访问的需求
- CORS错误配置:CORS本身不存在漏洞,而是由于开发者在配置CORS过程中,错误配置跨域访问Allow List,导致非预期的站点可以进行跨域访问,最终可能导致信息泄漏。