1.7 本章小结
理解编程语言对于查找漏洞和编写exploit代码来说是必要的。程序员如果要为Java程序编写一个缓冲区溢出exploit,那么就是在浪费时间。同样,理解编程语言和底层系统的交互方式,对于编写shellcode也是很重要的。最后,本章还介绍了4种流行编程语言的基本编程指令和特性。
本章讨论的每种语言都有其自身的优缺点。这4种语言也有一些共性,包括数据类型和基本编程概念,如函数和循环等。10多年前,C仍然是很有用的语言,是快速创建强大程序的简单而高效的语言。因此,当程序与UNIX操作系统交互时,通常用C语言来编写漏洞探测代码。较新的一些语言,比如Java和C#等(以及.NET框架),提供了可移植性和安全性等特性。将类和函数标记为private就可以实现数据隐藏。自动垃圾收集器提供了排除代码中的bug和内存泄漏的功能。编程语言可以避免以前类中可能出现的漏洞。Java和C#使用自动数组边界检测,有效防止了栈和堆溢出。
在没有语言支持安全特性的时候,Web应用程序员必须研究所有的输入、输出以及应用程序的函数所必需的限制性字符。在和后端数据库交互时必须进行审核,以确保没有SQL(Structured Query Language,结构化查询语言)命令被注入到数据库中。
Perl和Python都是强大的、流行的、很有用的脚本语言。其他流行的脚本语言还有Ruby、UNIX C/Korn/Bourn Shell、VBScript和SQL。在开发程序的时候,使用脚本语言比使用解释型编程语言具有更多好处,但是主要的动力都在于快速开发和易于使用。一般来说,能快速创建脚本,这主要得益于解释器的优点,这些优点是编译器不具备的。字符串处理和套接字的使用是Perl和Python的两种最流行的特性。字符串匹配、比较和处理的需求极大地推动了正则表达式的成熟发展,目前大多数高级脚本语言都包含了这一特性。最终用户可以使用这些特性来创建脚本,用其解析和分析大量的数据,以生成智能输出。
脚本语言可以协助完成频繁冗长的任务。如果一项任务每天要做很多次,就要考虑该任务是否能通过自动执行脚本来完成,可以通过内嵌时间控制器来自动执行这些脚本。






