这是基于vue-vben-admin 模板适用于abp vNext的前端管理项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

9.4 KiB

网络防护

**本文档中引用的文件** - [SameSiteCookiesServiceCollectionExtensions.cs](file://aspnet-core\services\LY.MicroService.AuthServer\Microsoft\Extensions\DependencyInjection\SameSiteCookiesServiceCollectionExtensions.cs) - [IdentityServerModule.Configure.cs](file://aspnet-core\services\LY.MicroService.IdentityServer\IdentityServerModule.Configure.cs) - [AbpAspNetCoreHttpOverridesModule.cs](file://aspnet-core\framework\common\LINGYUN.Abp.AspNetCore.HttpOverrides\LINGYUN\Abp\AspNetCore\HttpOverrides\AbpAspNetCoreHttpOverridesModule.cs) - [yarp.json](file://gateways\internal\LINGYUN.MicroService.Internal.ApiGateway\src\LINGYUN.MicroService.Internal.Gateway\yarp.json) - [ocelot.json](file://gateways\internal\LINGYUN.MicroService.Internal.ApiGateway\src\LINGYUN.MicroService.Internal.ApiGateway\ocelot.json)

目录

  1. 引言
  2. HTTPS强制重定向与HSTS头设置
  3. CORS策略配置
  4. CSRF防护机制
  5. 内容安全策略(CSP)与XSS防护
  6. 安全头信息设置

引言

本项目是一个基于ABP框架的微服务管理平台,提供了完整的网络防护机制。系统通过多层安全策略确保Web应用的安全性,包括HTTPS强制、CORS跨域控制、CSRF防护、安全头设置等。本文档详细说明了这些安全功能的实现原理和配置方法。

HTTPS强制重定向与HSTS头设置

系统通过Cookie策略和请求处理机制实现了对HTTPS的强制要求。当检测到非HTTPS请求时,系统会自动调整Cookie的SameSite属性以增强安全性。

SameSiteCookiesServiceCollectionExtensions.cs文件中,系统实现了对SameSite Cookie策略的精细控制:

flowchart TD
A[开始] --> B{请求是否为HTTPS?}
B --> |是| C[允许SameSite=None]
B --> |否| D[设置SameSite=Unspecified]
C --> E[检查User-Agent兼容性]
D --> F[防止不兼容浏览器的问题]
E --> G[完成Cookie设置]
F --> G
G --> H[结束]

图示来源

  • SameSiteCookiesServiceCollectionExtensions.cs

该机制特别针对以下情况进行了优化:

  • iOS 12上的Safari、WkWebview和Chrome浏览器
  • macOS 10.14上使用Mac OS网络堆栈的Safari浏览器
  • Chrome 50-69版本

对于这些可能存在兼容性问题的浏览器,即使在HTTPS环境下也会将SameSite设置为Unspecified,以避免认证问题。

章节来源

  • SameSiteCookiesServiceCollectionExtensions.cs

CORS策略配置

系统通过统一的CORS配置实现了跨域资源共享的安全控制。在多个服务模块中都实现了相似的CORS策略配置。

graph TB
A[CORS配置] --> B[获取允许的源列表]
B --> C{源列表为空?}
C --> |是| D[从配置字符串解析]
C --> |否| E[直接使用配置]
D --> F[去除末尾斜杠]
E --> F
F --> G[构建CORS策略]
G --> H[允许任何头部]
G --> I[允许任何方法]
G --> J[允许凭据]
G --> K[暴露ABP特定头部]
H --> L[完成配置]
I --> L
J --> L
K --> L

图示来源

  • IdentityServerModule.Configure.cs

CORS配置的主要特点包括:

  • 支持通配子域名:通过SetIsOriginAllowedToAllowWildcardSubdomains()方法实现
  • 暴露ABP特定头部:使用WithAbpExposedHeaders()WithAbpWrapExposedHeaders()方法
  • 允许凭据传输:通过AllowCredentials()方法支持身份验证信息的跨域传递
  • 动态源配置:从配置文件中读取允许的源列表,支持逗号分隔的多个源

这种配置方式既保证了必要的跨域功能,又通过限制暴露的头部和严格的源验证确保了安全性。

章节来源

  • IdentityServerModule.Configure.cs
  • WorkflowManagementHttpApiHostModule.Configure.cs

CSRF防护机制

虽然项目中没有直接的CSRF防护代码,但通过JWT认证和API网关的转发机制间接实现了CSRF防护。

在API网关配置中,系统通过YARP和Ocelot实现了请求转发和安全控制:

sequenceDiagram
participant Client as 客户端
participant Gateway as API网关
participant Service as 后端服务
Client->>Gateway : 发送API请求
Gateway->>Gateway : 验证JWT令牌
Gateway->>Gateway : 添加X-Forwarded头部
Gateway->>Service : 转发请求
Service->>Service : 验证身份和权限
Service-->>Gateway : 返回响应
Gateway-->>Client : 返回结果

图示来源

  • yarp.json
  • ocelot.json

关键安全特性:

  • 使用JWT进行身份验证,避免了基于Cookie的会话管理
  • API网关作为单一入口点,集中处理安全策略
  • 请求转发时添加X-Forwarded-*头部,保留原始请求信息
  • 限制响应头的暴露,只允许必要的ABP包装结果头部

章节来源

  • yarp.json
  • ocelot.json

内容安全策略(CSP)与XSS防护

系统通过多层机制防范XSS攻击,主要包括输入验证、输出编码和安全头设置。

在反向代理配置中,系统实现了请求和响应的转换规则:

flowchart LR
A[客户端请求] --> B{请求类型}
B --> |API请求| C[添加X-Forwarded头部]
B --> |SignalR连接| D[复制请求/响应头]
B --> |静态资源| E[常规转发]
C --> F[后端服务]
D --> F
E --> F
F --> G[处理请求]
G --> H[返回响应]
H --> I[限制暴露的响应头]
I --> J[客户端]

图示来源

  • yarp.json

安全特性包括:

  • 限制暴露的响应头,只允许_AbpWrapResult_AbpDontWrapResult_AbpErrorFormat
  • 对SignalR连接启用请求和响应头复制,确保实时通信的安全性
  • 使用反向代理隐藏后端服务的真实地址
  • 通过JWT认证确保只有授权用户才能访问API

章节来源

  • yarp.json
  • ocelot.json

安全头信息设置

系统通过多种方式设置了关键的安全头信息,包括X-Content-Type-Options、X-Frame-Options等。

X-Forwarded头部处理

系统通过AbpAspNetCoreHttpOverridesModule模块处理转发的请求头:

classDiagram
class AbpAspNetCoreHttpOverridesModule {
+ConfigureServices()
+Configure()
}
class RequestForwardedHeaderWebClientInfoProvider {
+GetClientIpAddress()
+GetClientName()
+GetClientPort()
}
AbpAspNetCoreHttpOverridesModule --> RequestForwardedHeaderWebClientInfoProvider : "使用"

图示来源

  • AbpAspNetCoreHttpOverridesModule.cs
  • RequestForwardedHeaderWebClientInfoProvider.cs

主要功能:

  • 配置ForwardedHeadersOptions以处理代理转发的头部
  • 替换默认的客户端信息提供者,正确识别通过代理的客户端IP地址
  • 支持X-Forwarded-For、X-Forwarded-Proto等标准头部

安全头配置

在网关级别,系统配置了多种安全相关的头部:

flowchart TD
A[请求进入] --> B{是否需要安全头?}
B --> |是| C[添加X-Forwarded头部]
C --> D[设置响应头白名单]
D --> E[转发到后端服务]
E --> F[处理请求]
F --> G[返回响应]
G --> H[确保安全头被正确处理]
H --> I[返回给客户端]
B --> |否| I

图示来源

  • yarp.json

安全头策略包括:

  • 使用X-Forwarded-*头部传递原始请求信息
  • 严格控制响应头的暴露,防止敏感信息泄露
  • 通过网关统一处理安全策略,减轻后端服务的负担
  • 支持WebSocket连接的安全转发

章节来源

  • AbpAspNetCoreHttpOverridesModule.cs
  • yarp.json