c# - 为什么不安全的代码上下文[与指针操作相关]是 C# 中的安全风险?
问题描述
我需要调用 C 库函数,该函数将指针作为来自一个 C# 程序的参数。在 C# 中,我们需要使用#unsafe关键字来保护指针操作。Microsoft C# 文档说使用指针会导致稳定性和安全性问题。
在公共语言运行时 (CLR) 中,不安全的代码被称为无法验证的代码。C# 中的不安全代码不一定是危险的;它只是 CLR 无法验证其安全性的代码。因此,如果 CLR 位于完全受信任的程序集中,则 CLR 只会执行不安全的代码。如果您使用不安全的代码,您有责任确保您的代码不会引入安全风险或指针错误。
文档说
使用不安全的代码会带来安全和稳定性风险。
我是 C# 语言的新手。在 UNIX 环境之前,我只使用 C 语言工作。我了解不正确的指针存在稳定性问题。它可能会使程序/操作系统崩溃或可能导致意外结果。
这些是我的问题:
1)我不明白指针操作如何导致安全问题。我唯一能想到的是调用一个包含恶意代码的函数指针,但是这个堆栈溢出链接说调用函数指针不需要不安全的上下文(如果我的理解有误,请纠正我)。那么禁用指针操作将如何提高安全性呢?
2)我们可以从C#程序中调用C函数,这些C函数可能包含恶意代码。CLR 可以检测到这个安全漏洞吗?
解决方案
滥用指针的安全风险的一个例子是use after free。这个问题的一个例子是最近在 Chrome 中发现的一个安全问题。
我对 C# 不是很熟悉,但我猜 CLR 并不“理解”C 代码,而是直接执行它。因此,我认为 CLR 无法分析/检测您要使用的 C 代码的问题。
推荐阅读
- javascript - 如何在 sequelize 中对嵌套属性进行分组?
- javascript - 正则表达式从字符串获取对象参数并从 JSON/Js 对象获取这些参数的值
- python - TypeError:不支持的操作数类型/:'Image'和'int'
- tomcat - Jenkins无法连接到节点,没有找到已知的主机文件
- php - 迁移时将 Laravel MYSQL 更改为 utf8mb4
- c# - C# FTP上传文件夹内多个文件的文件优先级
- javascript - 如何使用 TypeScript 对数组对象进行递归分组?
- mysql - 具有多个查询的NodeJS mysql连接池
- swift - 查找符合协议的所有类型
- ansible - 使用 ansible 更新服务器组的 SSH 密钥