我正在开发带有 Swagger UI 的 REST API。当需要公开 API 时,我是否也应该公开 Swagger UI?如果是这样,我将如何将其打包到我的应用程序中。目前,我已经从 GitHub 下载了 UI,并将其存储在我的项目旁边的文件夹中。
我正在使用 Go(带有 Echo 框架)来编写 API。
如果 swagger 暴露于生产环境并且可以像这样公开访问,则可以存在安全线程:
增加攻击面:Swagger 成为潜在拒绝服务 (DoS) 攻击的额外入口点。
信息公开: Swagger 公开有关 API 端点、请求/响应结构和数据模型的详细文档。
注入漏洞:Swagger中暴露的信息,包括数据格式、输入验证和实现细节,可以帮助攻击者发起注入攻击。 Ex- SQL 注入或跨站脚本 (XSS) 可以操纵或危害数据和系统。
未经授权的访问风险: Swagger 配置不当可能会导致对敏感 API 端点或功能进行未经授权的访问。
出于安全威胁,我们不应该在生产中启用 swagger。 在.net core 6.0版本中,我们可以在Program.cs中使用以下代码来保护它。
if(!app.Environment.IsProduction())
{
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "My Service");
c.RoutePrefix = string.Empty; // Set Swagger UI at apps root
});
}
这是我发现的一个博客,可以在访问 UI SPA 本身时使用中间件启用 aad 身份验证:https://blog.cellenza.com/en/cloud/secure-access-to-swagger-ui-with-azure-活动目录/