不受信任的 URL 字符串的安全 Process.Start 实现

2024-04-13

我的目标是在用户默认浏览器中安全地打开网页。该网页的 URL 被视为“不受信任”(将其视为使用该软件打开的文档中的链接,但该文档可能来自任何地方,并且其中的链接可能是恶意的)

我想避免有人将“C:\Windows\malicious_code.exe”作为 URL 传递

我目前的想法是做这样的事情:

Uri url = new Uri(urlString, UriKind.Absolute);
if( url.Scheme == Uri.UriSchemeHttp || url.Scheme == Uri.UriSchemeHttps )
{
   Process.Start(url.AbsoluteUri);
}

我是否忘记了我的“urlString”可能包含的任何其他内容,这使得这种危险(例如,一个换行符,它允许某人在 URL 之后偷偷启动第二个进程,或者可能执行以 http 开头的相对可执行文件)?

我很确定这两种情况都是这样处理的(因为我不相信 Process.Start 允许您像在 BATCH 文件中那样启动两个进程,并且这应该只允许以 http: 或 https: 开头的字符串和是有效的网址)

在 C# 中是否有更好的方法来做到这一点?


您要检查的是scheme网址的(即ftp://, http://, file://等)以下是方案列表:http://en.wikipedia.org/wiki/URI_scheme#Official_IANA-registered_schemes http://en.wikipedia.org/wiki/URI_scheme#Official_IANA-registered_schemes

要查找 URL 的方案,请使用:

Uri u = new Uri("C:\\Windows");
String scheme = (u.GetLeftPart(UriPartial.Scheme).ToString());

对我来说,上面的例子给出了file://。只需使用上面的代码检查方案,然后拒绝您要过滤的方案。另外,用一个包围解析try-catch阻止,如果捕获异常,则拒绝该 URL;它无法被解析,所以你不应该相信它。

如果您想要绝对安全,您始终可以使用 URL 解析器解析 URL 并重建它,同时验证每个部分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不受信任的 URL 字符串的安全 Process.Start 实现 的相关文章

  • 我应该如何使用 Perl URI 类?

    我需要在 Perl 程序中处理一些 HTTP URL 但我怀疑应该如何处理URI https metacpan org module URI类帮助我 特别是 我想使用URI用于解析相对 URL 并获取其组件的类 然而 问题是 我需要一个可以
  • 在opencv中保存帧而不压缩

    我正在尝试使用写 OpenCV 函数 我想保存帧 TIFF扩大 我遇到的问题是保存的图像被压缩 所以我无法使用它们 知道如何摆脱这种压缩吗 提前致谢 不要介意西奇说的话 TIFF 标志通过 LZW 压缩硬编码在 opencv 二进制文件中
  • 在运行时配置 ASP.NET 会话状态

    我们有一个使用 SQL Server 会话状态的 ASP NET 网站 状态配置在Web config like
  • Windows Server / Datacenter:设置 CPU 关联性 > 64 个核心

    SetThreadAffinityMask 允许为 64 个逻辑核心 处理器 设置关联掩码 但是 Windows Datacenter 最多可以有 64 个 CPU 每个 CPU 都有多个内核 请参阅here http social tec
  • 如何让我的方法等待所有线程完成?

    我有一个方法可以触发线程来完成一些工作 将有 2 个线程异步运行一段时间 当调用它们的回调方法时 回调会触发另一个线程 直到所有工作完成 如何让我的方法等待所有这些线程完成并被触发 如果这是 Net 4 0 您可以使用CountdownEv
  • 将 CryptoStream 解密为 MemoryStream

    我编写了一个过程 其中文件被加密并上传到 Azure 然后必须解密下载过程 这会失败并出现 填充无效且无法删除 错误 或 要解密的数据长度为无效的 错误 我在网上尝试了很多解决方案 包括C 使用 RijndaelManaged 和 Cryp
  • 以 ASCII 字符串形式获取 MemoryStream 内容的快速方法

    我在 MemoryStream 中有一个 JSON 字符串 我使用以下代码将其作为 ASCII 字符串获取 MemoryStream memstream new MemoryStream Write a JSON string to mem
  • 在 C++ 中重用异常处理代码

    我有这两个函数 具有重复的异常处理 其唯一目的是显示错误消息 void func1 noexcept try do task do another task catch const std out of range e show msg O
  • 提高 ASP.NET/C# 编译速度的最佳方法是什么?

    更新 请将您的答案集中在硬件解决方案上 您使用什么硬件 工具 插件来提高 ASP NET 编译和首次执行速度 我们正在寻找固态硬盘来加快速度 但现在价格确实很高 我现在有两个 RAID 0 的 7200 rpm 硬盘 但我对性能不再满意 所
  • 尝试利用?

    我看到我的 nopCommerce 网站记录了以下搜索 ADw script AD4 alert 202 ADw script AD4 我有点好奇他们想要完成什么 我搜索了一下 似乎是ADw script AD4 以 UTF7 编码为
  • 委托:方法名称预期错误

    我正在尝试让以下简单的委托示例正常工作 根据我从中取出的一本书 应该没问题 但我得到了Method name expected error namespace TestConsoleApp class Program private del
  • 在 Perl 中,如何从父进程向子进程发送消息(或信号),反之亦然?

    我正在编写一个管理多进程的程序 这就是我所做的 而且效果很好 但现在 我想将消息从子进程发送到父进程 反之亦然 从父进程到子进程 你知道最好的方法吗 你知道我所做的是否是我想要的正确方法 从子进程到父进程发送消息 信号或共享内存 反之亦然
  • cuda中有模板化的数学函数吗? [复制]

    这个问题在这里已经有答案了 我一直在寻找 cuda 中的模板化数学函数 但似乎找不到 在普通的 C 中 如果我调用std sqrt它是模板化的 并且将根据参数是浮点数还是双精度数执行不同的版本 我想要这样的 CUDA 设备代码 我的内核将真
  • C# SerialPort BaseStream ReadAsync - CancellationToken 从未取消?

    我尝试以异步方式从串行端口读取数据 请记住操作所花费的时间不得超过指定的时间段 我使用的代码 private async Task
  • 如何使用 GCC 在 C 上编译库?

    我用这些文件创建了一个库pila h and pila c 我编译文件pila c with gcc pila c c这个库运行良好 我已经测试过了 然后我又做了一个图书馆 这个库有文件pila funciones extra h and
  • C# 中的自定义按钮:如何删除悬停背景?

    我正在尝试使用 Visual Studio 2005 对我的表单 其 FormBorderStyle none 执行自定义按钮 我在链接到该按钮的 ImageList 中有我的 3 种状态按钮图像 this btnClose AutoSiz
  • 使用C#在SQL Server上执行sql文件

    我有很多程序 视图 函数等文件 我想在 SQL Server 2005 2008 上的适当数据库中执行这些文件 创建组件 还有一点是我想使用 C 来执行它们 另一点需要提及的是 我希望应用程序也可以在远程 SQL Server 上执行此文件
  • OpenMP 动态调度与引导调度

    我正在研究 OpenMP 的调度 特别是不同的类型 我了解每种类型的一般行为 但澄清一下何时进行选择会很有帮助dynamic and guided调度 英特尔的文档 https software intel com en us articl
  • 对 MFC UI 应用程序进行单元测试吗?

    如何对大型 MFC UI 应用程序进行单元测试 我们有一些大型 MFC 应用程序已经开发了很多年 我们使用一些标准的自动化 QA 工具来运行基本脚本来检查基础知识 文件打开等 这些由 QA 小组在日常构建后运行 但我们希望引入一些程序 以便
  • 我如何将 C++ 与 VALA 混合起来

    我需要用 C 编写跨平台的 GUI 应用程序 但由于 C 的大多数 GUI 库都有点乏味 而且我对 C NET 非常熟悉 我发现使用 GTK 的代码 Vala 代码非常有趣 并且与其他方式相比有点容易 那么我该如何将 VAlA 与 C 混合

随机推荐

  • 如何清除EditText的焦点?

    我有一个带有搜索框的活动 EditText 位于顶部 ListView 位于下方 每当活动启动时 EditText 始终具有焦点并调出键盘 该键盘部分覆盖了ListView 没有其他文本视图可以获得焦点 我希望 EditText 仅在用户触
  • 通过 PowerShell 在远程计算机上设置环境变量

    我正在尝试通过 TFS Releasemanagement 通过调用 powershell 脚本来设置环境变量 该脚本应该在计算机上打开远程会话并设置环境变量 param Parameter Mandatory true String Re
  • 在 iOS 8.3 上测试应用程序时出错:Testflight 无法安装应用程序。此请求有错误

    我将 Xcode 更新到 7 2 我向测试人员发送了一个应用程序版本 一名测试人员出现以下错误 Testflight could not install app There was an error with this request 他的
  • 加入并包含在实体框架中

    我有以下 linq toEntity 查询 问题是它似乎没有加载 标签 关系 即使我已经为其添加了一个东西 如果我不加入标签 它工作正常 但我需要这样做 var items from i in db Items Include Tags f
  • 在 Windows 10 上,pipenv install/pipenv shell 无法与 Git Bash 一起使用

    在使用适用于 Windows 10 的 Git Bash 时 我很难让 Pipenv install 和 Pipenv shell 命令正常工作 使用 powershell 时 我能够成功创建一个新的虚拟环境并使用 Pipenv shell
  • 如何查看 Perforce 中的分支是否包含错误修复?

    我是一个新的 perforce 用户 但过去使用过许多其他源代码控制系统 我们使用变更列表来签入每个错误修复 更改列表注释包含错误 ID 因此可以轻松跟踪错误修复的时间签入分店 但是 我看不到一种简单的方法来查找给定错误修复的所有分支并入
  • 发送自动短信

    首先 我们使用 net sql server 我有一位客户对能够在预定时间发送短信的系统感兴趣 除了通过电子邮件网关发送短信之外 我从未做过类似的事情 例如 电子邮件受保护 cdn cgi l email protection 但是 我认为
  • Python 导入令人头疼

    我有以下目录结构 Main py A init py B init py C init py 文件Main py包含代码 from A import B from B import C The init py文件为空 当我跑步时Main p
  • 对向量元素进行向量化循环

    我发现很难对以下问题提出快速解决方案 我有一个观察向量 它表示观察某些现象的时间 example lt c 0 0 0 1 0 1 1 0 0 0 1 0 0 1 1 0 0 1 0 0 现在我想消除特定观察之间的零 假设某种现象会持续下去
  • 数字输入旋转框CSS代码编译为JSS

    我在转换时遇到问题CSS隐藏数字输入旋转框的代码JSS 我的问题是如何正确转换此代码以使其与 JSS 匹配 input webkit outer spin button input webkit inner spin button webk
  • 围绕图中的点绘制圆圈

    我有两个矩阵 timeline 0 0008 0 0012 0 0016 0 0020 0 0024 0 0028 原始数据 79 8400 69 9390 50 0410 55 5082 34 5200 37 4486 31 4237 2
  • Scala 编译器有哪些特殊类型?

    Scala 非常重视如何将看似语言的功能实现为库功能 是否有该语言特别处理的类型列表 是在规范中还是作为实现细节 例如 这包括优化元组的客场匹配 与模式匹配 推导式 try catch 块和其他语言结构相关的特殊约定又如何呢 String
  • CodeBuild 不报告失败的测试

    我正在使用 CodeBuild 构建我的 NPM 项目 我的构建规范中有一个特定的报告组 并且我正在使用 Jest 和npm test命令 当所有测试通过后 将成功报告给 CodeBuild 报告组 但是 如果其中一项测试失败 我会收到错误
  • 为什么 Google Analytics 不跟踪任何事件?

    我已经实现了几乎标准的示例
  • Azure DevOps - 自定义任务 - 具有 Azure 身份验证的 PowerShell

    到目前为止 我使用 Azure PowerShell 任务在 Azure 上下文中执行 PowerShell 脚本 https learn microsoft com en us azure devops pipelines tasks d
  • 大浮点和的精度

    我正在尝试对正递减浮点数的排序数组求和 我发现对它们求和的最佳方法是开始从最低到最高将数字相加 我编写此代码是为了提供一个示例 但是 从最高数字开始的总和更精确 为什么 当然 1 k 2之和应该是f 1 644934066848226 in
  • 在 Java 循环中重新声明变量

    在Java中 我们不能将一个变量与另一个同名变量声明在同一作用域中 int someInteger 3 int someInteger 13 语法错误 无法编译 但是 如果我们将其放入循环中 for int i 0 i lt 10 i in
  • Google 云端硬盘哑剧类型列表? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 As per https developers google com drive manage uplo
  • 如何避免右侧滚动条与顶部导航栏(引导程序)重叠?

    我有一个网站 导航栏固定在顶部 导航栏位于左侧 当网站需要滚动时 右侧的滚动条与顶部导航栏重叠 我希望导航栏从顶部导航栏下方开始 我摆弄了一个问题的例子 https jsfiddle net jsmnsLm7 https jsfiddle
  • 不受信任的 URL 字符串的安全 Process.Start 实现

    我的目标是在用户默认浏览器中安全地打开网页 该网页的 URL 被视为 不受信任 将其视为使用该软件打开的文档中的链接 但该文档可能来自任何地方 并且其中的链接可能是恶意的 我想避免有人将 C Windows malicious code e