网络安全漏洞
一、介绍
1.1 网站的基本构成
前端:界面展示、接口调用
后端:提供数据接口、处理业务逻辑
1.2 安全事件
数据泄露、服务瘫痪、成果失窃、系统劫持
1.3 网络攻击者
政治目的、经济目的、竞争目的、炫技、泄愤
二、服务端漏洞
2.1 第三方组件
针对java可以使用dependency-check-maven检查组件是否有安全漏洞。
2.2 SQL注入
由于sql语句静态模板和动态数据没有完全区分,如果在数据项中加入sql语句关键字,就可能在操作数据库时得到执行。
案例:
- 语言框架使用错误或框架存在安全漏洞
- mybatis使用【$】构建sql模板
- golang写法错误GORM语句为:db.Order(param).Find(&products)
解决:
- 不要直接拼接字符串,使用预编译、ORM框架
- 使用ORM框架时,注意框架特性
- 在一定需要拼接sql语句的复杂场景中,对外部输入进行转义
2.3 命令执行
代码中存在命令拼接,可能会被注入命令
解决:
- 动态的值开启白名单
- 如果无法白名单,校验数据类型
- 特殊字符黑名单过滤
2.4 越权漏洞
- 未授权
- 水平越权
- 垂直越权
2.5 SSRF
服务端请求伪造攻击,攻击者利用 后端服务器 ,使其向非预期的网络地址发出恶意请求,获取敏感信息或执行恶意操作
防护方式:对url的host进行白名单过滤
2.6 文件上传漏洞
- 脚本上传
- 图床泄露
防护:
- 限制文件类型
- 站库分离:应用部署的位置和上传的文件分离
- 防止图床:时间限制、访问身份限制
三、客户端漏洞
3.1开放重定向
开发者没控制好重定向的范围,攻击者通过构造恶意链接控制网站重定向,引导用户重定向到恶意站点。
防护:对重定向网站进行严格的白名单控制。
3.2 XSS
跨站脚本(XSS)攻击:本质是一种script代码注入,用户访问web页面时,web页面内嵌的script脚本会被执行,从而窃取用户敏感信息。
防护:
输入过滤、输出过滤、富文本场景代码白名单、CSP (content-security-policy)
3.3 CSRF
跨站请求伪造(CSRF): 访问恶意链接,使用户执行敏感操作,达成目的
防护:
判断请求来源是否合法:
- CSRF token: 首次访问时向客户端传递token,客户端每次访问时必须带上此token.
- samesite cookies:禁止某些场景发送第三方cookie
- referer-based validation:检验referer来源是否合法
3.4 点击劫持(clickjacking)
在网页中将恶意代码隐藏在普通内容中,诱导用户点击。
防护:
X-Frame-Option
CSP
3.5 CORS跨域配置错误
跨域资源共享(CORS)
错误配置:
1.前缀后缀正则匹配
2.反射
3.信任null
4.https信任http
3.6 WebSocket
socket设计配置
1.WSS和WS:提供加密信道,杜绝中间人攻击。
2.数据校验:SQL/XSS/RCE漏洞存在
3.CSWSH: cross-site websocket hijacking: cookie认证时,未验证源,导致websocket会话劫持
总结:
在开发过程中我们往往不小心造成的疏漏就很有可能成为有心者利用的工具,在写代码的时候要充分关注网络安全。