选择自 hf1650 的 blog
一、概述
当网络编程越来越方便,系统功能越来越强大,安全性却指数倍地下降。这恐怕就是网络编程的不幸和悲哀了。各种动态内容生成环境繁荣了www,它们的设计目标就是为了给开发者更多的力量,给最终用户更多的方便。正因为如此,系统设计师和开发者必须明确地把安全问题作为一个考虑因素,事后追悔很难奏效。
从安全的角度来看,服务器端www应用的弱点来源于各种各样的交互能力和传输通道。它们是攻击者直接可以用来影响系统的工具。在攻击者寻找和利用系统安全漏洞时,它们总是给系统安全带来压力。对付所有这些攻击的通用防卫策略就是所谓的输入验证。
从同一层面考虑,主要有两种设计上的错误导致了安全方面的问题:
· 拙劣的访问控制。
· 对部署环境作隐含的假设。
在有关安全的文献中,针对访问控制问题有着许多深入的分析。这里我们要讨论的是底层实现(代码和配置)上的安全管理问题,讨论的环境是jsp。或者说,我们将讨论恶意的用户输入伪装自身以及改变应用预定行为的各种方法,考虑如何检验输入合法性以及减少对信息和应用接口的不受欢迎的探测。
二、jsp概述
jsp技术允许把java代码逻辑嵌入到html和xml文档之内,为创建和管理动态www内容带来了方便。jsp页面由jsp引擎预先处理并转换成java servlet,此后如果出现了对jsp页面的请求,web服务器将用相应的servlet输出结果作为应答。
虽然jsp和servlet在功能上是等价的,但是,和servlet相比,jsp的动态内容生成方法恰好相反:jsp是把java代码嵌入到文档之中,而不是把文档嵌入到java应用之中。为访问外部功能和可重用的对象,jsp提供了一些用来和javabean组件交互的额外标记,这些标记的语法和html标记相似。
值得注意的是:html语法属于jsp语法的一个子集(一个纯html文档是一个合法的jsp页面),但反过来不一定正确。特别地,为了便于动态生成内容和格式,jsp允许在标记之内嵌入其他标记。例如,下面是一段合法的jsp代码:
<a href = "<%= request.getremoteuser() %>">
从本文后面可以看到,这种结构增加了安全问题的复杂性。
与cgi相比,jsp具有更好的性能和会话管理(即会话状态持久化)机制。这主要通过在同一个进程之内运用java线程处理多个servlet实现,而cgi一般要求为每一个请求分别创建和拆除一个进程。
三、安全问题
由于完全开放了对服务器资源的访问,从jsp页面转换得到的不安全servlet可能给服务器、服务器所在的网络、访问页面的客户机之中的任意一个或全体带来威胁,甚至通过ddos或蠕虫分布式攻击,还可能影响到整个inte.net。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器