无法在 ASP.NET 中纠正 VeraCode CWE ID 918 - (SSRF)

2024-04-03

长话短说,无论我如何尝试,VeraCode 都会继续将我的 8 行代码标记为 CWE 918 缺陷。这是旧代码,所以我不确定为什么它突然被标记。

这是一个示例 [offending] 方法,其中标记行以粗体显示

  public virtual async Task<HttpResponseMessage> Put(string controller = "", Dictionary<string, object> parameters = null, object body = null)
        {
            if (string.IsNullOrWhiteSpace(ApiBaseUrl)) return null;
            HttpResponseMessage response = null;

            using (var client = GetHttpClient())
            {
                client.BaseAddress = new Uri(ApiBaseUrl);

                if (!string.IsNullOrEmpty(Token)) client.DefaultRequestHeaders.Add("Token-Key", Token);
                if (!string.IsNullOrEmpty(DeviceId)) client.DefaultRequestHeaders.Add("DeviceId", DeviceId);

                var url = GenerateUrl(controller, parameters);

                var requestBody = GeneratedHttpContent(body);
                if (requestBody == null) requestBody = new StringContent("");

                **response = await client.PutAsync(url, requestBody);**

                await LogError(response);
                return response;
            }
        }

这是我提出的修复方案,它利用扩展方法来验证 URL

var url = GenerateUrl(controller, parameters);

                var requestBody = GeneratedHttpContent(body);
                if (requestBody == null) requestBody = new StringContent("");

                **if (url.IsValidUrl())
                {
                    response = await client.PutAsync(url, requestBody);
                }
                else
                {
                    response = new HttpResponseMessage(HttpStatusCode.BadRequest);
                }**

                await LogError(response);
                return response;

这是带有 VeraCode 属性的扩展方法

        [RedirectUrlCleanser]
        public static bool IsValidUrl(this string source)
        {
            return Uri.TryCreate(source, UriKind.RelativeOrAbsolute, out Uri uriResult) && Uri.IsWellFormedUriString(source, UriKind.RelativeOrAbsolute);
        }

我可以让 VeraCode 根据属性自动缓解,但我们的客户端将执行自己的扫描,并且肯定不会启用该设置。

任何关于如何解决这个问题的想法将不胜感激。


该缺陷的真正来源是在您的GenerateUrl方法内部,不幸的是没有显示,但这里是Veracode抱怨的一般概念。

对于 CWE ID 918,除非您有静态 URL,否则很难让 Veracode 识别您的修复。您需要验证成为请求 URL 一部分的所有输入。 以下是我在 Veracode 网站上找到的内容:https://community.veracode.com/s/question/0D52T00004i1UiSSAU/how-to-fix-cwe-918-veracode-flaw-on-webrequest-getresponce-method https://community.veracode.com/s/question/0D52T00004i1UiSSAU/how-to-fix-cwe-918-veracode-flaw-on-webrequest-getresponce-method

完整的解决方案仅适用于具有单个或少量可能输入值(白名单)的情况:

public WebResponse ProxyImage(string image_host, string image_path)
{
    string validated_image_host = AllowedHosts.Host1;
    if (image_host.Equals(AllowedHosts.Host2))
        validated_image_host = AllowedHosts.Host2;

    string validated_image = AllowedImages.Image1;
    if (image_path.Equals(AllowedImages.Image2))
        validated_image = AllowedImages.Image2;

    string url = $"http://{validated_image_host}.example.com/{validated_image}";

    return WebRequest.Create(url).GetResponse();
}

如果可能的有效值集对于此类验证来说太大,那么您需要通过使用正则表达式对输入实施动态验证来修复该缺陷。不幸的是,Veracode 不够聪明,无法识别这种修复,因此仍然需要“通过设计进行缓解”。

public WebResponse ProxyImage(string image_host, string image_path)
{
    var image_host_regex = new System.Text.RegularExpressions.Regex("^[a-z]{1,10}$");
    if (!image_host_regex.Match(image_host).Success)
        throw new ArgumentException("Invalid image_host");

    var image_path_regex = new System.Text.RegularExpressions.Regex("^/[a-z]{1,10}/[a-z]{1,255}.png$");
    if (!image_path_regex.Match(image_path).Success)
        throw new ArgumentException("Invalid image_host");

    string url = $"http://{image_host}.example.com/{image_path}";
    return WebRequest.Create(url).GetResponse();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法在 ASP.NET 中纠正 VeraCode CWE ID 918 - (SSRF) 的相关文章

  • Jquery 对话框部分视图服务器端验证“保存”按钮单击

    我有一个显示数据的表格 表格的每一行都有编辑按钮 单击编辑按钮时 将出现一个 jquery 对话框 其中包含用于编辑用户信息的表单以及保存和取消按钮 表单只不过是部分视图 按钮是部分视图的一部分
  • 为 CKEditor 指定自定义配置文件

    我正在尝试将 CKEditor 添加到我当前正在开发的页面 但在让它获取我的自定义配置文件时遇到问题 我在 Visual Studio NET 2008 中使用 CKEditor 我需要自定义显示的工具栏 因为 Basic 太少了 而 Fu
  • 在 Windows 服务中调用 Web 服务

    我使用了一个简单的 Windows 服务来使一个方法在特定时间运行并且运行良好 接下来我已经尝试过 protected override void OnStart string args this WriteToFile Simple Se
  • MVC3 RESTful API 路由和 Http 动词处理

    我想为我的 MVC3 应用程序构建 RESTful Json Api 我需要帮助处理多个 Http Verbs 以操作单个对象实例 我读过 研究过 尝试过的内容 MVC 属性 HttpGet HttpPost等 允许我拥有一个具有多个共享相
  • 会员提供商使用还是不使用?

    我正在开发一个使用 Facebook 的网站 现在为了管理用户我想使用MembershipProvider并选择开发一个定制的会员提供商 我的问题是我的数据库架构与标准成员资格架构不匹配 并且提供的用于覆盖的函数采用与我预期不同的参数 例如
  • asp.net mvc - 如何在 javascript 中循环访问模型数据

    我试图用 javascript 将数据添加到列表框 但是字符串构建语法让我难住了 var yourobject 导致错误 字符文字中的字符太多 全部代码 var mlb cm createListBox mylistbox title My
  • 如何将 GWT 与 Visual Studio 一起使用来创建 ASP.NET 网站?

    如何将 GWT 与 Visual Studio 一起使用来创建 ASP NET 网站 如果可能 GWT 可以与任何后端一起使用 只需做一些工作 它开箱即用 使用 servlet 容器 但您不需要保留此容器 容器中的关键项是加载GWT编译代码
  • 预编译的 asp.net 网站中的 - 这重要吗?

    我正在 Visual Studio 2008 上使用 Web 部署项目部署一个预编译和全页面合并的网站 请注意 所有程序集和项目都已在发布模式下编译 我的所有页面都是在发布模式下预编译的 所以它们不会被重新编译 它们只会被运行时加载 在不需
  • 带有 CosmosDBTrigger 的 Azure 函数似乎不是由 upsert 触发的

    我是第一次使用 Azure Functions 我正在尝试编写一个简单的函数来响应更改或添加到 CosmosDb 集合中的文档 我写的函数如下所示 FunctionName ChangeLog public static void Run
  • ASP.NET 4.0 中的模拟 HttpRequest

    我见过很多类似的帖子 但没有一个能真正解决我的特殊情况 我正在 ASP NET 4 0 Web 应用程序 ASP NET Forms 而不是 MVC 中编写单元测试 代码中有几个地方我称之为ServerVariables调用变量的集合 例如
  • 在 ASP.NET Core 中使用防伪功能并出现错误 - 防伪令牌无法解密

    我的 ASP Net Core MVC 应用程序已添加防伪中间件如下 启动 cs services AddMvc services AddSession services AddCaching services AddSession o g
  • asp.net 检查 imageURL 是否存在

    我正在尝试从另一个 Intranet 站点获取用户的缩略图 但其中一些不遵循预定义的格式 这意味着我想加载默认的缩略图 检查图像 URL 是否有效的最佳方法是什么 根据您获取图像的方式 此方法的变体可能会起作用 img src alt My
  • ASP.NET DropDownList OnSelectedIndexChanged 事件未触发

    我试图同时使用一些 AJAX 和 ASP Net 来运行函数而无需刷新整个页面 但我在执行此操作时偶然发现了一个问题 这是我的代码
  • Asp.net core webapi获取从Angular4应用程序发布的空值

    我是新来的Angular4在快速交付内容的情况下 所以没有时间彻底学习它 所以如果我的问题看起来很幼稚 请原谅 From my Asp Net Web API I have Confirmemail API必须从 Angular4 应用程序
  • 如何保护 ASP.NET Web API [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想建立一个RESTful使用 ASP NET Web API 的 Web 服务 第三方开发人员将使用该服务来访问我的应用程序的数据
  • 需要帮助理解这段代码

    我正在尝试学习单元测试 我正在尝试对我在 asp net mvc 1 0 中制作的一些会员资格内容进行单元测试 我一直在关注一本关于 MVC 的书 我对一些东西感到困惑 希望有人能为我解答 我的框架使用 Nunit 和 Moq 问题一 pu
  • SQL 选择与带有通配符的 URL 匹配的行

    我在数据库中有一个表 其中一列包含一个 URL 例如http example com users http example com users 轮廓 我得到了一个 URL 例如http example com users 234 profi
  • Web.config 在 Azure 部署期间发生(大幅)更改

    部署到 Azure 后 我不断收到服务器错误 应用程序无法运行 所以我在实例中做了一个远程桌面 发现 web config 被彻底修改了 这是怎么回事 我以为 web config 是按原样打包的 相反 整个配置已被替换 当我用原始的 未改
  • 如何防止用户生成的 Sql 查询上的 Sql 注入

    我有一个项目 私有的 ASP net 网站 受 https 密码保护 其中要求之一是用户能够输入直接查询数据库的 Sql 查询 我需要能够允许这些查询 同时防止它们对数据库本身造成损坏 以及访问或更新它们不应该访问 更新的数据 我制定了以下
  • 在 asp.net mvc 3 中使用 Last-Modified 标头和 OutputCacheAttribute 进行客户端缓存

    Edited 我想在客户端缓存图像 并且知道在 mvc 3 中有不同的方法可以做到这一点 如果我错了 请纠正我 1 你可以使用OutputCacheAttribute其工作原理是Expireshttp 标头 但它会回来304 Not Mod

随机推荐

  • SQL 查询 - 获取最新修订

    我将 T Sql 与 SQL Server 2008 一起使用 假设我有父表 项目 ProjectID ProjectNam 1 Test Project 1 2 Test Project 2 和子表项目修订 ProjectRevID Pr
  • C# 如何确定对象的大小?

    我有以下课程 public class MyClass public string Name get set public int Age get set public double Amount get set 当我尝试使用 WinDbg
  • Windows 上窗口系统的 win32 框架的替代方案

    我想用 C 开发一个不应依赖于 win32 库的自定义窗口系统 例如 Google Chrome 的界面与 Windows 自己的界面不相似 同样 MPCstar 和 adobe 产品也有自己的界面 请帮助我从哪里开始这个项目 您可以使用跨
  • Swift:如何仅更改 webView 中的 或图像大小

    我从服务器获取 HTML 并将其显示在 UIWebView 中 由于要求 未选择 缩放页面以适合 选项 UIWebView 的宽度等于屏幕宽度 高度根据内容而变化 HTML 中的图像标签包含一些内联样式 这些样式在 webView 的视图中
  • Python matplotlib:指定图形大小时未释放内存

    我正在使用 matplotlib 生成许多数值模拟结果图 这些图用作视频中的帧 因此我通过重复调用与此类似的函数来生成其中的许多图 from pylab import def plot density filename i t psi Na
  • PHP 提交表单后保持复选框选中状态

    大家好 我有一份联系表格和验证码 我希望在提交表格后保持检查状态 我发布了文本框值 它显示正确 但复选框不起作用 这是我的代码
  • Pandas 将列类型从列表转换为 np.array

    我正在尝试将一个函数应用于 pandas 数据框 这样的函数需要两个 np array 作为输入 并且它使用定义良好的模型来拟合它们 关键是我无法从选定的列开始应用此函数 因为它们的 行 包含从 JSON 文件读取的列表 而不是 np ar
  • 如何将节点检查器与“npm start”一起用于我的应用程序?

    我在用npm start启动我的 MEAN 堆栈应用程序 但我想使用节点检查器来调试一些 Mongoose 我知道我可以启动节点检查器node inspector 但是我可以用什么来代替node debug app js与 使npm sta
  • Delphi - 从静态链接的 MSVC++ 编译的 DLL 捕获 stdout 和 stderr 输出

    我一直在努力捕捉stdout and stderr我的 Delphi 应用程序静态链接到的 MSVC 中编译的 DLL 的输出 但到目前为止尚未成功 procedure Test var fs TFileStream begin fs TF
  • 从另一个 git 存储库链接单个文件

    你如何链接一个单个文件从另一个 git 存储库到您自己的存储库 我不需要完整的存储库 只需要一个文件 使用git submodule看似正确的路线 但它想要抓住整个事情 考虑到 git 的工作单元是一个存储库 或者更准确地说是一个存储库 c
  • 禁用 JavaFX 图表背景图像的缓存

    我有一个简单的折线图 按下按钮即可在新窗口中打开 该折线图使用存储在硬盘上的图像作为背景 如果我关闭计算折线图的窗口 更改图像文件 或删除它 并重新打开窗口 则会再次加载旧图像 我在场景生成器和代码中禁用了折线图的缓存 但这没有帮助 有人能
  • 返回 false 不起作用

    我创建了一种带有动态创建复选框的表单 我使用了一个 j 查询脚本来检查天气用户是否选中了至少一个复选框 如果没有 那么它会发出错误消息警报 HTML 代码 print
  • android:应用程序不支持设备 - 为什么?

    我目前正在开发一个相机应用程序 现在 一位用户抱怨他的设备不受支持 它是宏碁A200 http www specsbox com 819 acer iconia a200 tablet html 我不明白为什么 android market
  • 如何从Qt调用evaluateJavaScript()函数?

    我无法从 QT 调用 javascript 函数 我正在使用下面的代码 QT代码 QWebFrame frame m d gt m webView gt page gt mainFrame frame gt evaluateJavaScri
  • Acumatica 实时动态下拉列表

    我有以下用例 Acumatica 组合框 下拉列表 可以有 8 个左右的值 其选择决定了用于在组合框 下拉列表中呈现的表 DAC e g 如果当前StatusProfileID WO1 和Status WCMP WCMP 是当前版本User
  • jQuery 选择器检查元素是否动画隐藏

    有没有办法判断一个元素是否被隐藏或当前正在隐藏 通过动画 我能想到的唯一方法是将标志存储在元素的data你打电话时show or hide 但我想知道是否还有其他方法 你能为它做一个自定义的 jQuery 选择器吗 function var
  • 可达性 - 奇怪的问题

    Reachability r Reachability reachabilityWithHostName www google com 这条线在设备上工作正常 但在模拟器上我崩溃了 由于未捕获的异常 NSInvalidArgumentExc
  • 如何在 jQuery 中读取绑定的悬停回调函数

    我使用 jQuery 为页面上的元素设置悬停回调 我现在正在编写一个模块 需要临时为某些元素设置新的悬停行为 新模块无法访问悬停功能的原始代码 我想在设置新的悬停功能之前存储旧的悬停功能 以便在完成临时悬停行为后可以恢复它们 我认为这些可以
  • 从 bash 在默认编辑器中打开文件

    如何使用 bash 打开使用默认 GUI 编辑器生成的脚本生成的文件 在 OS X 上有命令open 但据我所知 linux 上不存在 什么是好的跨平台替代方案 执行open somefile ext在 OS X 上 效果与我在 Finde
  • 无法在 ASP.NET 中纠正 VeraCode CWE ID 918 - (SSRF)

    长话短说 无论我如何尝试 VeraCode 都会继续将我的 8 行代码标记为 CWE 918 缺陷 这是旧代码 所以我不确定为什么它突然被标记 这是一个示例 offending 方法 其中标记行以粗体显示 public virtual as