Swagger UI 在生产环境中的最佳实践

10
我正在使用Swagger UI开发REST API。当暴露API时,是否应该同时暴露Swagger UI?如果需要,如何将其打包到我的应用程序中?目前,我已经从GitHub下载UI并将其存储在项目旁边的一个文件夹中。我使用Go(与Echo框架一起)编写API。

2
为什么你想公开暴露Swagger UI?我通常只在开发中使用Swagger,而不在生产环境中使用。 - Eklavya
抱歉,我所说的公开是指向公司其他开发人员。这样他们就能了解可供使用的端点。 - Hudnes87
我不在Github上存储文档,需要时可以使用命令再次生成,对于开发,您可以这样做:if appEnv != "PRODUCTION" { e.GET("/swagger/*", echoSwagger.WrapHandler)} - Eklavya
啊,好的,我明白了,那很有道理。谢谢! - Hudnes87
2个回答

6

如果暴露到生产环境并可以公开访问,Swagger可能存在安全威胁,例如:

  • 攻击面增加: Swagger成为一个额外的入口点,可能成为潜在的拒绝服务(DoS)攻击目标。

  • 信息暴露: Swagger公开了有关API端点、请求/响应结构和数据模型的详细文档。

  • 注入漏洞: Swagger中公开的信息,包括数据格式、输入验证和实现细节,可以帮助攻击者发动注入攻击,例如SQL注入或跨站脚本(XSS),从而操纵或破坏数据和系统。

  • 未经授权访问风险: Swagger配置不当可能导致对敏感API端点或功能的未经授权访问。


2

由于安全威胁,我们不应在生产环境中启用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    
        });
}

11
在生产环境中使用Swagger时,会有哪些安全威胁? - Lars Flieger
是的,你在谈论哪些安全威胁? - Stefan Falk
3
可能没有直接的威胁,但是除非有充分的理由将其包含在生产中,否则为什么要向潜在的攻击者提供 API 的蓝图呢? - Christopher Burgdorff
在编译时应该将其排除,而不是在运行时。如果你不需要它,它就不应该存在。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接