就会执行脚本,赋予黑客访问系统的权利。对于这种利用方式来说,Web应用程序比桌面应用
程序受的影响更大,但是两者你都必须受到保护。
幸运的是,.NET框架组件提供了强大的合格表达式(regular expression)支持。合格表达式定义了可接受的字符串输入,因此你可以轻易地检测到非法的字符。列表4显示了使用合格表达式的一个方法。
列表4:使用合格表达式
代码开头包含了Regex对象。在这种情况下,唯一可以接受的输入是字母(甚至于不能包含空格)。合格表达式旁路了大量的输入信息。实际上,为ASP.NET应用程序提供的很多验证支持中定义了很多的默认
模板。其要点在于你可以建立一个字符串,它定义了可接受的输入信息,包含了输入样式(例如电话号码)。
Regex对象可以执行很多比较操作。在例子中它使用Matches()方法对比字符串的长度和参照的数字。当这两个数字匹配的时候,输入信息就是正确的。否则,输入信息就包含了非法的字符,CheckChars()方法会引发异常。
提供高级的用户帮助
很多开发者都不能把帮助与良好的安全性联系到一起,但是良好的帮助的确可以减少用户犯错误来提高安全性。例如,良好的帮助文件可以通过显示应用程序希望接收的信息,从而防止某类用户输入错误信息。减少输入错误可以使我们彻底地分析遗留的错误信息,并最终减少不正确输入带来的安全风险。
帮助可以来自于所有形式,包括有用的错误消息。某些数据类型会提出一些特殊的挑战,而你的应用程序必须处理这些问题以确保数据完整性和安全性。例如,日期就是经常会出现问题的一个数据输入条目。首先,你必须考虑日期的格式。用户可能输入1 June 2003、06/01/2003、June 1, 2003、2003/06/01或其它可接受的变量。你应该约束自己的应用程序,只允许一种日期格式以便于检查日期信息的有效性。但是错误消息和帮助文件可以告诉用户必须使用哪种格式,这样用户使用错误格式输入一个有效日期的时候就不会感到沮丧(因为有帮助提醒格式)。
无论你怎样做,仍然有一些用户试图滥用系统。他们可能使用错误的格式输入日期,甚至于输入根本不包含日期的信息。但是,通过提供良好的帮助,你就拥有了用于询问用户的基本要素了。你可以调用安全性措施来确保用户知道这种行为是不可接受的。减少缓冲区溢出是一个主动的过程。你必须防止无效的输入、为用户提供良好的帮助、并给决心忽视规则的用户惩罚性的措施。