我正在使用Swagger UI开发REST API。当暴露API时,是否应该同时暴露Swagger UI?如果需要,如何将其打包到我的应用程序中?目前,我已经从GitHub下载UI并将其存储在项目旁边的一个文件夹中。我使用Go(与Echo框架一起)编写API。
如果暴露到生产环境并可以公开访问,Swagger可能存在安全威胁,例如:
攻击面增加: Swagger成为一个额外的入口点,可能成为潜在的拒绝服务(DoS)攻击目标。
信息暴露: Swagger公开了有关API端点、请求/响应结构和数据模型的详细文档。
注入漏洞: Swagger中公开的信息,包括数据格式、输入验证和实现细节,可以帮助攻击者发动注入攻击,例如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
});
}
if appEnv != "PRODUCTION" { e.GET("/swagger/*", echoSwagger.WrapHandler)}
。 - Eklavya