asp.net|程序
从安全的角度上讲,相对于自身的前一版本,ASP.NET已经表现出很大的改进。使用这一新的开发平台,程序员可以很容易地设计用户输入验证,同时,这一平台增加了很多特性,比如锁住程序功能等。除此之外,.NET运行时间能够支持垃圾收集和安全字符串的功能,这些都能预防外部的各种攻击。一个合适安全的.NET程序不仅能够阻止外部攻击,并且能够最大程度地减少各种形式的垃圾。
但是,不管ASP.NET具有多么完善的功能,在安全问题上它也不是完美无缺。安全分析专家H.D. Moore,也就是四月份的CanSecWest研讨会上的ASP.NET部分的three fairly major security holes(三个主要安全突破口)的作者,他说,这些强大的功能特性将会毫无价值,除非开发人员经常使用它们。Moore建议使用以下简单的安全技巧,以保护你的ASP.NET程序。
使用一些简单的设置控制
作为一种通用规则,请不要随便将任何信息放置在网络,因为这些信息将成为黑客攻击的线索。除非是一些与ISAPI处理程序相映射的文件扩展名,比如文件扩展名为:.aspx, .cs,及.vb。相反,以.txt, .csv, 及.xml的文件将不会自我保护,任何访问网站的人都可以访问这些文件。
在发布任何一个新的程序之前,一定要确认将支持跟踪和调试的功能去掉,并注意将web.config文件中的customErrors标签不要设置为“off”。这些安全措施有助于防止信息暴露到程序外面,特别是当程序发生错误的时候,这些信息包括:文件名,路径,以及可能的源代码等。
同时,在发布新程序之前,一定要清除程序的相关路径。请确认去掉Visual Studio项目和程序路径中的临时文件。与ISAPI访问过滤器不相映射的.sln和.slo文件将有可能从因特网上被看到,因为有些人可以猜想到程序的名称,这样就有可能导致巨大的攻击。
避免使用cookieless会议管理
Moore在评论中指出,ASP.NET的其中一个显著缺点是在程序中使用了"cookie-less session management"(cookie-less会议管理)方案而出现的"hijack"(抢劫)攻击。这一方案将会议标识符嵌入到每一个URL,让服务器能够识别每一个客户。这样就有可能出现问题:当使用这一功能的服务器收到一个不认识但合法的会议标识符,它就会生成一个可以参加的会议,这样一个“聪明的”黑客就会充分利用这一破绽,冒充合法用户,合法会议标识符,就可以访问系统内容。
这是一个阴险的攻击,Moore说到,因为URL不会觉得用户可疑,只有会议ID是可以伪造的。他建议开发人员尽可能地避免使用cookieless会议管理,直到微软把这一缺陷去掉。
“躲在砂盒(sandbox)里”
有时候.NET运行时间管理环境也会遭到如缓冲溢出的攻击,Moore指出,这是由于诸如使用StateServer类而导致的问题,随意调用这些管理不良的类有时候会为黑客提供攻击的线索。
Moore说道,开发人员应该尽可能地只限于使用.NET管理"sandbox" API函数,因为调用任何管理不良的类都有存在很大风险。然而,有时候你也可以使用一些特别的功能,如下面所示的技巧。
验证,验证,验证
尽管推出很多优异的功能,一些传统的特性还是深受应用,比如用户输入的验证。开发人员应该充分的利用强大的Validator(验证器)功能。这一功能可以从System.Web.UI.Validator扩展而来。如果你从未听说过.NET's validators,你自己可以阅读这方面的内容。
使用数据匹配功能
当在一个数据库程序中使用数字域时,在使用变量之前一定要确定将变量与合适的数据类型匹配起来。这样做可以预防产生SQL内部攻击,特别是当用户将一些非数字变量输入数据库时产生的异常。更重要的是,这样做可以生成警报,或写入日志,这很象是一个小型的非法闯入侦查系统。
更进一步的措施
如果你要在操作系统中安装一个网络程序,你最好充分利用web.config文件中的设置来运行程序,这样才能确保不同的用户验证。除此之外,你可以利用网络服务管理器来设置程序的信任级别,这样可以提高程序的安全性。