- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 API Gateway Pattern
架构中使用 Micro services
,其中 Front End Angular app
为我的 HTTP request
项目创建了一个 API Gateway
,它只是一个 ASP.net Core 3.1 Web API
项目。目前我只有 2 个 micro services
和一个 API Gateway
,它们都是 ASP.net Core 3.1 Web API
项目类型。 API Gateway
项目拥有我的 micro services
的所有 Controller 。 API Gateway
的目的只是为了接收来自 Front end
的请求,并制作一个 HTTP Request
到合适的 Micro service
。
现在在我的AccountController.cs
项目的API Gateway
中,我有如下代码
/// <summary>
/// Gets the detail of an account by its id
/// </summary>
/// <param name="organizationId">Id of the Organization of which the account belongs to</param>
/// <param name="accountId">Id of Account of which information is being requested</param>
/// <returns>Account's Details</returns>
[HttpGet("{organizationId}/{accountId}")]
public async Task<IActionResult> GetAccountAsync(Guid organizationId, Guid accountId)
{
_uri = new Uri(uriString: $"{_configurationService.AccountAPI}GetAccount/{organizationId}/{accountId}");
using var result = await _client.GetAsync(_uri);
var content = await result.Content.ReadAsStringAsync();
return Ok(content.AsObject<MessageResponse<AccountDetailVM>>());
}
在 stackoverflow 上搜索 SSRF
问题后,我在 Veracode community 找到了以下建议。
Veracode Static Analysis will report a flaw with CWE 918 if it can detect that data from outside of the application (like an HTTP Request from a user, but also a file that may have been uploaded by a user, database data, webservice data, etc) is able to change the nature of a network request.
在 Stackoverflow 上我发现了以下修复
For CWE ID 918 it is hard to make Veracode recognize your fix unless you have static URL. You need to validate all your inputs that become parts of your request URL.
这意味着我必须在将输入参数 OrganizationId
和 AccountId
附加到请求 URL 之前对其进行清理。
另外一个关于veracode community的问题建议
The only thing that Veracode Static Analysis will automatically detect as a remediation for this flaw category is to change the input to be hardcoded
他们提出了查询字符串的解决方案
The given example appears to take a model identifier and put it in the URL used in an internal request. We would recommend validating the ID per the rules you have for this datatype (typically this should only be alphanumeric and less than 255 characters) and URLencode it before appending it to a URL.
完成所有这些之后,我对我的代码进行了以下更改
修改后的代码
/// <summary>
/// Gets the detail of an account by its id
/// </summary>
/// <param name="organizationId">Id of the Organization of which the account belongs to</param>
/// <param name="accountId">Id of Account of which information is being requested</param>
/// <returns>Account's Details</returns>
[HttpGet("{organizationId}/{accountId}")]
public async Task<IActionResult> GetAccountAsync(Guid organizationId, Guid accountId)
{
if (organizationId != Guid.Empty && accountId != Guid.Empty)
{
string url = HttpUtility.UrlEncode($"{_configurationService.AccountAPI}GetAccount/{organizationId}/{accountId}");
using var result = await _client.GetAsync(url);
var content = await result.Content.ReadAsStringAsync();
return Ok(content.AsObject<MessageResponse<AccountDetailVM>>());
}
return BadRequest();
}
这就是我清理输入参数 OrganizationId
和 AccountId
所能做的所有事情,但在所有这些更改之后,veracode
仍然在线识别 SSRF
缺陷
using var result = await _client.GetAsync(url);
最佳答案
我找到了解决此问题的 hack,我只是将查询字符串参数附加到 httpClient 的基地址,veracode
不再给我错误。
这是解决方案的样子
/// <summary>
/// Gets the detail of an account by its id
/// </summary>
/// <param name="organizationId">Id of the Organization of which the account belongs to</param>
/// <param name="accountId">Id of Account of which information is being requested</param>
/// <returns>Account's Details</returns>
[HttpGet("{organizationId}/{accountId}")]
public async Task<IActionResult> GetAccountAsync(Guid organizationId, Guid accountId)
{
if (organizationId != Guid.Empty && accountId != Guid.Empty)
{
var httpClient = new HttpClient();
//Appended the parameters in base address to
//to fix veracode flaw issue
httpClient.BaseAddress = new Uri($"{_configurationService.AccountAPI}GetAccount/{organizationId}/{accountId}");
//passing empty string in GetStringAsync to make sure
//veracode doesn't treat it like modifying url
var content = await httpClient.GetStringAsync("");
return Ok(content.AsObject<MessageResponse<AccountDetailVM>>());
}
return BadRequest();
}
关于microservices - 在微服务架构中使用 API 网关模式时无法修复 veracode cwe id 918 缺陷 (SSRF),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62358911/
我们的客户端使用 Veracode 扫描工具扫描 ASP.NET 应用程序。除了以下问题,我们已经解决了许多缺陷。 Improper Neutralization of CRLF Sequences
我在运行静态扫描时收到 Veracode 错误:操作系统命令中使用的特殊元素的不正确中和(“操作系统命令注入(inject)”)(CWE ID 78) 应用程序使用我从前端接收到的参数调用进程(应用程
我在 veracode 工具中运行了我的安全合规应用程序。每当该工具发现任何日志记录时,它都会将其检测为代码中的缺陷 缺陷在下面引用 日志输出中和不当 描述 函数调用可能导致日志伪造攻击。将未经过滤的
我继承了一个处于维护阶段的 Java (Spring) 项目,该项目刚刚第一次通过 Veracode,我们剩下的唯一 High 缺陷是报告“弱或损坏”的缺陷加密演算法。我更愿意花时间学习更多有关密码学
我正在测试的代码中出现信任边界冲突。该代码在 session 中添加表单,并且由于违反信任边界而存在缺陷 Inside Struts Action class execute method { Ed
我正在尝试让 Veracode 扫描一个 iOS 应用程序:一个应用程序安全平台。为了让他们扫描 .IPA,.IPA 需要包含调试符号。 对于正在使用的存档构建配置和项目/目标,我指定了: 生成调试符
我们在 ASP.Net 和 C# 中有一个遗留的 Web 应用程序,我们发现了大约 400 多个由 Veracode 扫描引发的跨站点脚本缺陷。我创建了一个示例 Web 应用程序并模拟了该问题,发现无
我在 veracode 报告中得到了下一个发现:XML 外部实体引用(“XXE”)的不当限制(CWE ID 611) 引用下面的下一个代码 ... DocumentBuilderFactory d
我在下面的行中遇到了 veracode 问题 "> 问题在在这里,报告的问题是“网页中与脚本相关的 HTML 标签的中和不当(基本 XSS)。我已经尝试了 cwe.mitre.org 中给出的修复程序
我的 Veracode 报告中有下一个发现:XML 外部实体引用 ('XXE') (CWE ID 611) 的不当限制 引用下面的下一个代码 ... DocumentBuilderFactory
我们正在使用 Mongo DB java 驱动程序 3.4.1 jar。当我们进行 Veracode 测试时,我们发现: ScramSha1Authenticator.java line no 215
我在 session.setAttribute(var1,var2) 等线路上遇到了 veracode 缺陷 cwe id 501。我已经尝试过不同的方法来解决它,但无法解决这个问题。我尝试过的方法如
我有这个代码: try { BufferedWriter bw = null; FileWriter fw = null; try {
我使用 Veracode 扫描我的应用程序并出现以下错误未检查的错误条件。这是我的代码: let status = withUnsafeMutablePointer(to: &queryRes
我正在修复 veracode 静态扫描发现的缺陷,并且我发现了几个 session 修复缺陷,如下所示: request.getSession().get/set Attribute( ); OWAS
有一个 Spring 全局 @ExceptionHandler(Exception.class) 方法可以像这样记录异常: @ExceptionHandler(Exception.class) voi
我们在登录页面中使用 Web 控制适配器。最近我们在我们的 Web 应用程序上运行 VeraCode。在下面的函数中,我们得到了 CWE80, Improper Neutralization of S
代码如下 public void sendEmail(String toEmailAddr, String subject, String body) throws AppException {
有人能解释一下为什么 VeraCode 似乎认为使用 name 作为公共(public)属性(property)是一个坏主意,并提出了一个好的缓解措施吗? 代码(JavaScript): var Ba
我继承了一个遗留应用程序,下面给出了一段代码。 private static void printKeywordCheckboxes(JspWriter out, ArrayList words, i
我是一名优秀的程序员,十分优秀!