任何特定于C#的编码安全问题?

时间:2010-03-03 18:29:06

标签: c# .net security

在C ++世界中,有多种方法可以制作可利用的漏洞:缓冲区溢出,不安全的sting处理,各种算术技巧,printf问题,不以'\ 0'结尾的字符串等等。尽管java中解决了大多数这些问题,但仍有一些事情需要讨论。 但是,是否有任何典型的C#特定编码漏洞列表? (与.NET平台本身无关)

5 个答案:

答案 0 :(得分:6)

以下是您可能遇到的一些问题:

  1. 如果您有任何类型的语言解释器(HTML,JavaScript和SQL是三巨头),那么您仍然可能存在注入或XSS漏洞。
  2. P / Invoke可能会导致问题,尤其是在您进行任何自定义编组时。即使您通过P / Invoke调用“安全”API,您的编组代码也可能包含破坏或暴露内存的错误。
  3. 如果您正在进行文件访问,那么您需要确保您的文件始终位于可接受的目录中。务必对不良的绝对和相对路径进行消毒。
  4. 加密。良好的加密编程非常困难,.Net的各种安全功能对加密攻击没有任何作用。

答案 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例程来减少缓冲区溢出的可能性(需要用户缓冲区和/或最大大小)。关于阻止漏洞的唯一方法是关闭计算机并阅读纸质书(除非它也有病毒)。