网站安全漏洞全解析:保护你的网站免受攻击
一、网站漏洞概述
-
网站基本构成
- 网关代理(如nginx)
- 前端(JavaScript / Vue / React等)
- 后端(Go / Java / Node等)
- 数据库
- 静态资源(如img/js/css)
-
常见安全事件
- 数据泄漏:如X国公共卫生系统数据泄露事件。
- 服务瘫痪:如某老辉航空公司官网系统崩溃事件。
- 成果失窃:如某芯片制造巨头被勒索软件攻击事件。
- 系统劫持:如某国导弹袭击警报误报事件。
-
课程目的
- 蓝军:通过攻击验证企业内部安全现状,以攻促防。
- 红军:在系统建设时提前规避漏洞。
-
漏洞分类
- 服务端漏洞:SQL注入、RCE/命令注入、SSRF、文件上传等。
- 客户端漏洞:XSS、CSRF、点击劫持等。
二、服务端漏洞
-
第三方组件漏洞
- 组件使用不当可能导致服务器“中病毒”。
- 解决方案:使用dependency-check maven检查组件安全漏洞。
-
SQL注入
- 原理:SQL语句静态模板与动态数据部分未严格区分。
- 案例:订单查询、Mybatis-plus的inSql函数、Golang中Order排序。
- 防护方式:使用预编译和ORM框架,对外部输入转义。
-
命令执行
- 原理:命令拼接未做好安全过滤。
- 案例:库存查询接口中storeId参数注入命令。
- 防护方式:设置白名单验证、校验数据类型、过滤或转义特殊字符。
-
越权漏洞
- 认证、授权与越权概念:认证确定“你是谁”,授权明确“你能做什么”,越权是资源访问或操作时主体权限未校验导致的问题。
- 案例:水平越权(订单查询)、垂直越权(管理员访问普通用户无权限页面)。
- 防护方式:避免使用短id,做好资源属主校验。
-
SSRF(服务端请求伪造攻击)
- 原理:向非预期网络地址发出恶意请求。
- 案例:将URL改为http://localhost/admin访问内网页面。
- 防护方式:对url的host进行白名单过滤,判定解析的ip是否为内网地址。
-
文件上传漏洞
- 原理:上传恶意文件获取文件url。
- 案例:上传包含恶意代码的文件(如example.php)。
- 防护方式:对上传文件进行严格的类型和内容校验。
-
开放重定向
- 原理:程序未控制好重定向范围。
- 案例:redirect参数构造恶意链接。
- 防护方式:对重定向进行白名单控制并正确校验。
三、客户端漏洞
-
XSS(跨站脚本攻击)
- 原理:插入恶意Script代码。
- 案例:前端从请求path读取username并渲染到Dom中。
- 防护方式:输入过滤、输出html encode、使用安全指令、限制tag和attribute、使用CSP。
-
CSRF(跨站请求伪造)
- 原理:诱导用户访问恶意链接执行非预期操作。
- 案例:更改邮箱功能接口存在CSRF漏洞。
- 防护方式:使用CSRF tokens、SameSite cookies、Referer-based validation。
-
点击劫持
- 原理:隐藏恶意代码于无害内容下。
- 案例:删除账号功能页面被钓鱼页面frame覆盖。
- 防护方式:使用X-Frame-Options和CSP的frame-ancestors指令限制iframe来源。
-
CORS跨域配置错误
- 原理:错误配置CORS跨域访问Allow List。
- 案例:个人信息页接口允许跨域访问但配置有误。
- 防护方式:正确配置CORS跨域访问规则。
-
WebSocket相关漏洞
- WSS和WS:WSS提供加密信道,但仍可能存在SQL/XSS/RCE等漏洞。
- CSWSH(跨站WebSocket劫持) :使用cookie认证时,若WebSocket服务端未校验请求来源,会话可能被劫持。
- 防护手段:采用Cookie鉴权和ticket/token鉴权,限制请求Origin。
四、总结
- 网站安全是一个持续的过程,需要不断关注和更新防护措施。
- 了解各种安全漏洞的原理和防护方法是保障网站安全的关键。
- 定期进行安全审计和漏洞扫描,及时发现并修复潜在问题。