JSP应用的安全问题

2016-01-29 12:11 3 1 收藏

JSP应用的安全问题,JSP应用的安全问题

【 tulaoshi.com - Java 】

  一、概述  
当网络编程越来越方便,系统功能越来越强大,安全性却指数倍地下降。这恐怕就是网络编程的不幸和悲哀了。各种动态内容生成环境繁荣了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或蠕虫分布式攻击,还可能影响到整个Internet。人们往往假定,Java作为一种类型安全的、具有垃圾收集能力的、具有沙箱(Sandbox)机制的语言,它能够奇迹般地保证软件安全。而且事实上,许多在其他语言中存在的低层次安全问题,比如缓冲或堆溢出,很少给Java程序带来危害。然而,这并不意味着人们很难写出不安全的Java程序,特别是对编写Servlet来说。验证输入和控制对资源的访问是始终必须关注的问题。另外,JSP的体系结构相当复杂,其中包含许多相互协作的子系统。这些子系统之间的交互常常是安全隐患的根源。除此之外,虽然现在所有的JSP实现都围绕着Java,但JSP规范允许几乎所有其他语言扮演这个角色。这样,这些替代语言的安全问题也必须加以考虑。  
简而言之,在JSP系统中产生安全漏洞的机会是相当多的。下面我们将讨论它们中最常见的一部分。  
四、非置信用户输入的一般问题  
非置信的用户输入(Untrusted User Input)实际上包含了所有的用户输入。用户输入来源于客户端,可以通过许多不同的途径到达服务器端,有时甚至是伪装的。为JSP服务器提供的用户输入包括(但不限于):  
· 请求URL的参数部分,  
· HTML表单通过POST或GET请求提交的数据,  
· 在客户端临时保存的数据(也就是Cookie),  
· 数据库查询,  
· 其它进程设置的环境变量。  
用户输入的问题在于,它们由服务器端的应用程序解释,所以攻击者可以通过修改输入数据达到控制服务器脆弱部分的目的。服务器的脆弱部分常常表现为一些数据访问点,这些数据由用户提供的限定词标识,或通过执行外部程序得到。  
JSP能够调用保存在库里面的本地代码(通过JNI)以及执行外部命令。类Runtime提供了一个exec()方法。exec()方法把它的第一个参数视为一个需要在独立的进程中执行的命令行。如果这个命令字符串的某些部分必须从用户输入得到,则用户输入必须先进行过滤,确保系统所执行的命令和它们的参数都处于意料之内。即使命令字符串和用户输入没有任何关系,执行外部命令时仍旧必须进行必要的检查。在某些情况下,攻击者可能修改服务器的环境变量影响外部命令的执行。例如,修改path

来源:http://www.tulaoshi.com/n/20160129/1485010.html

延伸阅读
标签: 食疗养生
越是到春节这种人多聚餐的时候,食品安全越要放在心上。现笔者就常见的、容易忽略的一些问题,给大家作个提醒: 水果部分腐烂不能吃 由于保存不当,买回来的水果常常会烂掉,于是不少人就用刀把烂掉的部分挖掉,把没有坏的部分吃了。其实,这是一种错误的做法。有毒物质可以从腐烂部分通过果汁向未腐烂部分扩散,使未腐烂部...
标签: 宠物猫 宠物
注意家里潜在的威胁     检查房间里是否有裸露在外的电线,遗落在地上的塑料袋之类对猫咪有潜在危险的物品。家中的植物最好放在幼猫接触不到的地方,有的植物是有毒的比如夹竹桃,冬青树,杜鹃花,有些调皮的幼猫可能会去啃食。家里纱窗和阳台要关好,防止小猫不当心坠落。     对于杀虫剂、灭鼠药等有毒药物要放到猫咪...
标签: Web开发
ASP中可能有哪些安全问题? ASP具有简单、易用、多功能,可扩充性等强大功能,但也存在一些问题。譬如,如果使用ASP的话,可能会导致网络的安全性大大降低了!下面为大家举一个例子,请按照下面的步骤: (1)从http://home.gbsource.net/xuankong/dll.zip下载这个文件,解压缩后把其中的test.dll文件拷贝到c:\windows\system(如果你使用...
Microsoft SQL Server 7.0安全问题 Microsoft Corporation 【「Microsoft SQL Server 7.0」以下简称「SQL Server 7.0」】 SQL Server 7.0 有哪几种安全模式? 两种:SQL Server和Windows NT(混合)及Windows NT only。SQL Server 和Windows NT相当于SQL Server 6.5版本的混合模式。Windows NT only相当于SQL Server 6.5 版本的信任模式...
标签: Web开发
可以读/etc/passwd! 这段。。 [文件上载] PHP自动支持基于RFC 1867的文件上载,我们看下面的例子: FORM METHOD="POST" ENCTYPE="multipart/form-data" INPUT TYPE="FILE" NAME="hello" INPUT TYPE="HIDDEN" NAME="MAX_FILE_SIZE" VALUE="10240" INPUT TYPE="SUBMIT" /FORM 上面的代码让用户从本地机器选择一个文件,当点击提交后...

经验教程

507

收藏

50
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部