网络安全漏洞 | 青训营

136 阅读2分钟

定义

一个网站的基本构成

前端:javascript/vue/react 网关:nginx 后端:Go/Java/Node 前后端交互:HTTP/WebSocket

服务端漏洞

第三方组件漏洞

打印日志,解析JSON,出现问题
防护方式:针对Java可以选择使用dependency-check-maven检查项目以来的组件是否存在安全漏洞。

SQL注入

SQL语句静态模版和动态数据部分没有严格区分,如果在数据项中加入了某些SQL语句关键字,这些SQL语句就可以在数据库写入或读取数据时得到执行。
防护方法:

  1. 尽量不要基于DB的Raw方法拼接构造SQL语句,而应该使用预编译、ORM框架;
  2. 使用ORM框架时,应该注意框架中的特性,可能存在不安全的写法导致的SQL注入问题;
  3. 在复杂场景一定要使用拼接SQL,需要对外部输入进行转义。

命令执行

代码中遇到需要调用某个命令才能完成的功能时候,会涉及到命令拼接,如果命令拼接没有做好安全过滤,那么会导致命令注入风险,服务权限将会被控制。
防护方法:

  1. 对动态的值尽可能设置白名单进行验证;
  2. 如果某些位置无法白名单,需要尝试对数据类型进行校验;
  3. 特殊字符黑名单的过滤,或者转义。

越权漏洞

水平越权防护方式:涉及资源id尽量不要使用短id,同时最重要的一定要最好资源属主校验
垂直越权防护方式:如果是简单的场景,可以将接口在路由级别进行分组,对不同的API分组引入Middleware进行权限拦截,Middleware获取当前用户角色以确定是否可以访问此接口

客户端漏洞

开放重定向

修复方案:对重定向严格进行白名单控制并正确校验匹配白名单

XSS

防护方法:输入过滤,输出过滤,富文本场景,CSP

CSRF

防护方法:CSRF tokens, SameSite cookies, Referer-baseed validation

点击劫持

防护方法:X-Frame-Options, CSP:frame-ancestors

CORS

防护方法:代码层Middleware统一处理,网关层Nginx反代统一拦截处理

WebSocket

防护方法:Cookie鉴权,ticket/token鉴权