浏览主站 | 站长工具 | 新闻资讯 | 站长学院 | 站长盈利 | HTML教程 | 网址导航 | 站长周刊 | 会员投稿 | 滚动新闻 | RSS
发新话题
打印

Java服务器端编程安全必读

Java服务器端编程安全必读

[[wiki]wiki[/wiki]][/wiki]一、概述
编写[wiki]安全[/wiki]的Internet应用并不是一件轻而易举礫wiki]氖[/wiki]虑椋褐灰纯锤鞲鲎ㄒ倒姘寰涂梢哉业搅欢系陌踩┒幢ǜ妗D闳绾伪Vぷ约旱腎nternet应用不象其他人的应用那样满是漏洞?你如何保证自己的名字不会出现在令人难堪的重大安全事故报道中?
如果你使用Java [wiki]Servlet[/wiki]、JavaServer Pages(JSP)或者EJB,许多难以解决的问题都已经事先解决。当然,漏洞仍覽wiki]锌[/wiki]赡艹鱿帧O旅嫖颐蔷屠纯纯凑庑┞┒词鞘裁矗约拔裁碕ava[wiki]程序[/wiki]员不必担心部分C和Perl[wiki]程序员[/wiki]必须面对的问题。
C程序员对安全漏洞应该已经很熟悉,但象OpenBSD之[wiki]类[/wiki]的工程提供了处理此类问题的安全[wiki]系统[/wiki]。Java语言处理这类问题的经验要比C少20年,但另一方面,Java作为一种客户端[wiki]编程[/wiki]语言诞生,客户端对安全的要求比[wiki]服务器[/wiki]端苛刻得多。它意味着Java的发展有着一个稳固的安全性基础。
Java原先的定位目标是[wiki]浏览器[/wiki]。然而,浏览器本身所带的Java虚拟机虽然很不错,但却并不完美。[wiki]SUN[/wiki]的《Chronology of security-related bugs and iss[wiki]UE[/wiki]s》总结了运行时[wiki]环境[/wiki]的漏洞发现历史。我们知道,当Java用作服务器端编程语言时,这些漏洞不可能被用作攻击手段。但即使Java作为客户端编程语言,重大安全问题的数量也从1996年的6个(其中3个是相当严重的问题)降低到2000年的1个。不过,这种安全性的相对提高并不意味着Java作为服务器端编程语言已经绝对安全,它只意味着攻击者能够使用的攻击手段越来越受到限制。那么,究竟有哪些地方容易受到攻击,其他编程语言又是如何面对类似问题的呢?



二、缓存溢出
在C程序中,缓存溢出是最常见的安全隐患。缓存溢出在用户输入超过已分配内存[wiki]空间[/wiki](专供用户输入使用)时出现。缓存溢出可能成为导致应用被覆盖的关键因素。C程序很容易出现缓存溢出,但Java程序几乎不可能出现缓存溢出。
从输入流读取输入数据的C代码通常如下所示:
char buffer[1000];
int len = read(buffer);





由于缓存的大小在读入数据之前确定,系统要检查为输入保留的缓存是否足够是很困难的。缓存溢出使得用户能够覆盖程序数据[wiki]结构[/wiki]的关键部分,从而带来了安全上的隐患。
有经验的攻击者能够利用这一点直接把代码和数据插入到正在运行的程序。在Java中,我们一般用字符串而不是字符数组保存用户输入。与前面C代码等价的Java代码如下所示:
String buffer = in.readLine();

TOP

发新话题