说.Net平台更安全是否正确,因为CLR可以防止缓冲区溢出攻击?
假设有一个在托管操作系统中运行的Web浏览器(如Cosmos,SharpOS或Singularity),攻击者在技术上是否可以将IL代码注入应用程序?
我是否必须担心在非托管应用程序中无法进行的攻击?
在大多数情况下,你是对的.使用安全类型系统(不仅仅是.NET或Java)的应用程序不允许应用程序违反这些约束.
缓冲区溢出和许多其他远程代码漏洞发生是因为这些语言和运行时的约束不提供检查,并且不能保证程序不会像在内存中执行任意代码那样.安全系统验证代码不受这些影响.
(作为旁注,C#仍然可以执行不安全的操作并将其自身设置为执行任意代码.这只是相当麻烦且不太可能在实际应用程序中使用.)
您将在托管浏览器中看到的安全漏洞是,如果它允许使用CLR作为安全环境加载任意代码.虽然CLR生成的代码(即应用程序的JIT'd)是安全的,但加载器和验证器本身通常用较低的语言编写.有一些(我认为2 for .NET?)安全漏洞,恶意形成的程序集可能会迫使实际的CLR执行任意代码.然而,这些是相对罕见的问题,表面积远小于其他情况.
所以,是的,一个完全安全的托管浏览器本身不会成为这些特定漏洞的牺牲品.但这也意味着你必须以类似的方式编写和执行你的插件(Flash?).最后,还有其他可以针对的安全漏洞,但通常它们不会像您在非托管应用程序中发现的那样严重.例如,跨站点脚本仍然是一个问题.但至少你不会有"查看文件可以执行仲裁代码"类型的问题.