在C ++世界中,有多种方法可以制作可利用的漏洞:缓冲区溢出,不安全的sting处理,各种算术技巧,printf问题,不以'\ 0'结尾的字符串等等。尽管java中解决了大多数这些问题,但仍有一些事情需要讨论。 但是,是否有任何典型的C#特定编码漏洞列表? (与.NET平台本身无关)
答案 0 :(得分:6)
以下是您可能遇到的一些问题:
答案 1 :(得分:5)
C#基于.NET,.NET应该是类型安全的,这意味着你的恐怖列表都不适用于C#或任何.NET语言。
但话说回来,C#有一个unsafe
关键字,之后所有的赌注都关闭了
它允许真正的指针以及随附的所有内容。
答案 2 :(得分:2)
不是真的。我将在这里做一个大胆的声明:
没有“与.net平台无关的C#特定编码漏洞”。
用C ++编写的程序直接编译成机器可执行文件,因此语言编译器直接负责创建执行代码,因此C ++可以轻松地“创建可利用的漏洞”。
然而,用C#编写的程序被编译成IL,这是.net平台使用的唯一语言。 .net环境基于该IL代码创建机器可执行文件。 C#所能做的一切只是.net平台能够实现的子集。这就是我如何能够做出大胆的陈述。您可以使用C#创建编码漏洞的任何内容都是以下之一:
1).net平台中的错误
或
2)在.net平台之外执行代码
所以你的问题目前的措辞方式让我相信你要么没有完全意识到“用C语言编写代码”和“为.net平台编写代码”之间的巨大差异,要么我误解了你的错误。题。也许两者都有! 8)
希望这有帮助!
答案 3 :(得分:0)
可能没有您关注的问题列表,但请注意这一点:void*
答案 4 :(得分:-1)
别忘了,你可以从C#调用任何C ++。我一直这样做。因此C ++的所有缓冲区溢出问题等都与C#相关,如果你不直接调用C ++,因为C#调用C ++来完成它的工作。<登记/> 想一想。任何COM调用和Marshal调用都像正常一样开放。在Linux中,您可以使用_r例程,在Ver ++中使用VC ++,您可以使用_s例程来减少缓冲区溢出的可能性(需要用户缓冲区和/或最大大小)。关于阻止漏洞的唯一方法是关闭计算机并阅读纸质书(除非它也有病毒)。