Java Servlet安全开发解决方案外文翻译资料

 2022-12-07 11:12

英语原文共 4 页,剩余内容已隐藏,支付完成后下载完整资料


Java Servlet安全开发解决方案

MARIA VLAD, CATALINA NUTA, MADALIN STEFAN VLAD,

VALENTIN SGARCIU

自动控制和计算机学院,布加勒斯特大学

313,Spaiul Independentei,六部,布加勒斯特,罗马尼亚

电子邮件:maria@ac.pub.ro,nuta_catalina@yahoo.com,madalinv@ac.pub.ro,vsgarciu@aii.pub.ro

摘要:一个网络应用程序包含可以由多个用户访问的资源。这些资源往往遍布在未受保护的,开放式网络中,例如因特网。在这样的环境中,相当数量的网络应用会有安全方面的需求。尽管质量保证和实现细节可能有所不同,但是各种servlet容器有着以下共同方面的需求:身份认证,资源访问控制,数据完整性,机密性或数据隐私。

关键词:servlet,安全性,JAVA,JDK

1.简介

在万维网的历史的早期,通用网关接口(CGI)被定义为是用来允许Web服务器来处理用户输入和服务动态内容的接口。

开发Servlet API是为了利用Java平台的优点去解决CGI和专属API的问题。这是个简单的API几乎能被所有的Web服务器,甚至负载平衡,容错应用程序服务器所支持。 它通过把所有执行请求作为线程的方式解决了存在于过程,负载均衡系统,或者每个服务器簇中的性能问题。正如你将在本文中看到的,Servlet的可以轻松地共享资源。

1.1.定义Servlet的概念

Servlet是一个基于Java技术的网站部件,通过其生成容器管理动态内容。像其他基于Java技术的组件一样,Servlet是一个独立于平台的Java类,能够被编译为平台无关的字节码,可以动态加载到一个支持Java技术的Web服务器上。

Servlet属于服务器端组件。这些部件可以在任何平台或任何使用JAVA核心技术的服务器中执行。Servlet增强了Web应用程序的功能性。他们在需要时被动态加载到服务器的Java运行环境中。在接到一个从客户机请求时,网络服务器/容器启动所需的servlet。该Servlet处理客户请求和发送应答返回给服务器/容器,这是路由到客户端的。

容器,有时也被称为servlet引擎,是Web服务器扩展,提供servlet功能。 Servlet与Web客户端通过servlet容器实现了请求/响应范例的交互。

1.2.定义Servlet容器的概念

servlet容器是一个Web服务器或者网络应用服务器的一部分,用来提供请求和响应发送,解码MIME的基础请求,并格式化MIME的基础响应等网络服务。 servlet容器还会通过生命周期来管理所包含的servlet。

一个servlet容器可以内置在网络服务器主机中,或者通过服务器的原生扩展API作为附加组件安装到Web服务器。Servlet容器也可以被内置或可能安装到基于Web的应用程序服务器中。

所有的servlet容器必须支持HTTP作为协议请求和响应,但也要支持其他请求/响应型的协议,例如HTTPS(基于SSL的HTTP)。一个容器必须实现的HTTP规范的版本是HTTP / 1.0和HTTP / 1.1。因为容器具有一个如RFC2616中描述的高速缓存机制(HTTP / 1.1),它可以在传递到servlet之前修改来自客户端的请求,可以在发送到客户端之前修改由servlet的产生反应,或者可以直接响应请求并发送到servlet而不用遵守RFC2616规则。

一个servlet容器可以在一个servlet的执行环境中加入安全限制。在Java 2平台标准版(J2SETM,v.6.0)或Java 2平台企业版(J2EETM,v.6.0)的环境中,这些限制应该使用通过Java 2平台定义的被允许的架构。举个例子,高端应用服务器可能会限制一个Thread对象的创建,以确保其他容器的组件不被干扰。

1.3.Servlet的生命周期

一个servlet是通过生命周期进行管理,该生命周期被定义好如何加载和实例化,被初始化,处理来自客户端的请求和退出服务。这个生命周期中在API中通过初始化,服务和javax.servlet的销毁方法等来描述。所有servlet必须直接或间接实现GenericServlet类或HttpServlet的抽象类。

图1 Servlet的生命周期

1.3.1.加载和实例

servlet容器负责加载和实例化servlet。加载和实例化可以当容器启动时发生,也可以延迟发生直到容器决定需要servlet来服务请求。

当servlet引擎启动时,需要的servlet类必须通过servlet容器进行定位。该servlet容器装载使用普通的Java类的servlet。加载可能来自一个本地文件系统,一个远程文件系统,或其他网络服务。加载Servlet类之后,容器会把它实例化并使用。

1.3.2. 初始化

servlet对象被实例化后,容器必须初始化servlet才可以处理来自客户端的请求。初始化是必要的,只有这样servlet才可以读取持久化的配置数据,初始化重要资源(如JDBCtrade;API基于连接),以及执行其他一次性活动。容器初始化servlet是通过具有独特的(每个servlet的声明)接口对象实现ServletConfig接口来调用这个Servlet的初始化方法。

此配置对象允许servlet从Web应用程序的配置信息获取名称初始化参数。该配置对象也给了Servlet对对象(实现ServletContext中接口)的访问权限,该对象描述了servlet的运行时环境。见SRV.3章“Servlet Context”获取有关ServletContext接口的更多信息。

1.3.3.请求处理

一个servlet正确初始化之后,servlet容器可以用它来处理客户机请求。请求由请求对象ServletRequest类型表示。servlet通过调用ServletResponse类型对象的方法来对请求进行回应。这些对象作为传递参数给Servlet的服务方法接口。

在HTTP请求中,对象由容器中HttpServletRequest和HttpServletResponse类提供。 注意,一个由servlet容器投入使用的servlet实例在它的生命周期里可能不会处理任何请求。

1.3.4.服务结束

servlet容器不需要在任何特定的时间段保持servlet的加载状态。一个servlet实例可能在servlet容器保持活跃一毫秒,也可能持续容器的整个生命周期(它可以是几天,几个月甚至几年),或任何生命期限之间。

当servlet容器决定一个servlet的应停止使​​用时,它会调用Servlet接口的销毁方法,使servlet来释放它正在使用的任何资源并保存任何持久状态。例如,当容器想节约内存资源时,或当它被关闭会做出上述操作。

servlet容器调用销毁方法之前,必须允许当前的在servlet的服务方法中运行的线程完整的执行,甚至超过一台服务器规定的时间限制。

一旦销毁方法被一个servlet实例调用,该容器可以不路由其他针对该servlet实例的请求。如果容器需要再次启用该servlet,它必须使用servlet类的新实例。

销毁方法完成后,该servlet容器必须释放servlet实例,以供符合垃圾回收。

1.4. Servlet的使用

异构并行计算。 CGI编程可以用几乎任何语言来完成,包括C和C 。这些语言都不是真正的适应不同的平台(例如,Windows和Unix)。只有Java语言是“一次编写,到处运行”。servlet是纯Java解决方案,在我们的系统中的实际的服务器可以是任何硬件和操作系统的组合。它对服务器的唯一要求是它支持servlet的执行。事实上,我们已经在由不同奔腾电脑和SunSPARC工作站构成的环境中测试过我们的系统了。就操作系统而言,包含了Windows 95,98,NT,2000,XP,Unix和Linux。我们并不需要改变程序的某条线。

持久性。一个servlet在完成操作后是作为对象存在于计算机内存中的。因此,它能够比CGI响应和执行速度更快。

安全性是指允许不同人接触不同的东西,但大多数人会同意,安全信息技术系统可以控制访问底层数据的权限,以便只有授权用户可以读取和修改数据。

一些安全组件是实现这一目标的简单需求:

bull;认证是一种手段,使用户能证明自己和获得系统认证。 IT的最常见的认证形式包括提供用户名和密码,但其它技术,如数字证书,智能卡和PIN号,和生物识别(指纹等),在某些系统中是可以使用的替代品。

bull;授权是过程,通过授权一个通过验证的用户被授予不同的数据项的访问权限。授权可以允许一些用户读取数据;而其他人可以读取,修改,或更新数据。

bull;保密性意味着只有授权用户可以查看数据,并通常需要如网络上常见的数据加密。

bull;完整性是指用户查看到的数据是和存储在系统中的数据是相同的。换句话说,该数据没有被破坏或从服务器传输给客户时发生改变。数据的完整性通常是通过使用数据加密实现的。完整性也意味着当用户改变数据,即改变是持久的,不能随后丢失。审计日志常用于支持完整性。

bull;不可否认性意味着,如果用户更改一段数据,该系统可以证明操作人和时间,即使用户随后否认进行更改。追踪系统和日志记录用于支持不可否认性。

2.SERVLETS的安全性

2.1.安全声明

安全声明表示一个应用程序的安全结构,包括角色、访问控制和外部应用的认证需求。部署描述符是声明Web应用程序安全性的基本工具。

部署人员将应用逻辑的安全性需求和代表运行环境特性的安全策略对应起来。在运行时,servlet容器的用安全策略表示执行认证和授权。

安全模型适用于Web应用程序的静态内容或者应用中由客户端请求的servlet和过滤器。当一个servlet使用RequestDispatcher来调用静态资源或servlet使用foward和include时,安全模式并不适用。

安全角色是由应用程序开发人员或部署人员来定义的用户逻辑分组。当应用程序部署完毕,角色映射到运行环境的主体或组。

servlet容器强制关联安全声明和基于安全传输所请求的主要属性。这可能会在以下任一情形中发生:

1.部署人员已经将安全角色映射到操作环境中的用户组。用户执行调用的主体所属组是通过它的安全属性检索。只有在主体用户组与部署人员映射的用户组匹配时才会应用安全角色。

2.部署人员已经规定了一个安全角色在安全策略域的主体名称。在这种情况下,调用的主体名称主要是从它的安全属性检索。只有在主体名称和安全角色定位的主体名称相同时,安全规则才回生效。

2.2.编程安全

当单独的声明安全不能充分地诠释安全模型应用时,安全意识应用程序会使用编程安全。这里编程个词的意思是从头开始实现,如果用户必须需要便携性,或者他们想完全控制,那将是个不错的选择。因为它比依靠自己的servlet容器需要更多的工作,如果他们对那些好处不感兴趣编程认证不是一个好的选择。编程身份验证的另一个缺点是HttpServletRequest.getUserPrincipal,HttpServletRequest.getRemoteUser和HttpServletRequest.isUserInRole对其来讲是无用的编程。编程认证需要实现并使用自己的API,因为对于servlet容器来说设置规则和角色是严格的。

为了防止未经授权的访问,每个Servlet或JSP页面必须要验证用户或验证该用户之前已认证过。至于保护网络数据,每一个servlet或JSP页面应该检查用于访问的网络协议。如果用户尝试使用一个普通的HTTP连接访问一个URL,servlet或JSP页面必须手动将其重定向到HTTPS(SSL)。

参考文献:

[1] Allamaraju, S. et al. (2000). Professional Java Server Programming J2EE Edition. Wrox Press, Inc., 978-1861004659, U.K.

[2] Basham, B. et. al (2008). Head First Servlets and JSP: Passing the Sun Certified Web Component Developer Exam, OReilly Media,978-0596516680

[3] Callaway, D. (1999). Inside Servlets:ServerSide Programming for the Java Platform,Addison-Wesley Pub (Sd), 978-0201379631,U.S.A.

[4] Crawford, W amp; Hunter, J. (1998). Java Servlet Programming, OReilly Media, Inc., 1-56592-391-XE, U.S.A.

[5] Geary, D. (2001). Java Servlet Authentication,Prentice

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[28695],资料为PDF文档或Word文档,PDF文档可免费转换为Word

您需要先支付 30元 才能查看全部内容!立即支付

课题毕业论文、开题报告、任务书、外文翻译、程序设计、图纸设计等资料可联系客服协助查找。