快捷搜索:

JSP应用的安全问题

一、概述

当收集编程越来越方便,系统功能越来越强大年夜,安然性却指数倍地下降。这生怕便是收集编程的不幸和伤心了。各类动态内容天生情况繁荣了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代码:

付款

留意在setProperty措施调用中应用的通配符号“*”。这个符号唆使JSP设置查询字符串中指定的所有属性的值。按照本意,这个脚本的调用要领如下:

http://server/addToBasket.jsp?newItem=ITEM0105342

正常环境下,HTML表单构造的查询字符串便是这种形式。但问题在于,没有任何器械能够防止用户设置balance属性:

http://server/addToBasket.jsp? newItem=ITEM0105342&balance=0

处置惩罚页面的标记时,JSP容器会把这个参数映射到Bean中具有同样名字的balance属性,并考试测验把该属性设置为0。

为避免呈现这种问题,JSP开拓者必须在Bean的Set和Get措施中实现某种安然步伐(Bean必须对属性进行强制的造访节制),同时,在应用的通配符时也应该胆小如鼠。

九、实现上的破绽与源代码安然

无论是哪一种JSP实现,在必然的阶段,它们的某些版本都邑呈现给系统带来危险的安然隐患,纵然JSP开拓者服从了安然编程常规也无济于事。例如,在Allaire的JRun的一个版本中,假如哀求URL包孕字符串“.jsp%00”作为JSP脚本扩展名的一部分,办事器不会轻忽null字节,它会把页面视为一个静态的非JSP页面之类的器械。这样,办事器会哀求操作系统打开该页面,而这时null字节却被轻忽,结果供给给用户的是JSP页面的源代码而不是页面的履行结果。

类似地,Tomcat的一个版本也有一个安然隐患。只要哀求类如下面的款式,它会让进击者看到JSP页面的源代码:

http://server/page.js%2570

这里的骗局在于,%25是URL编码的“%”,而70是“p”的十六进制值。Web办事器不会调用JSP处置惩罚器(由于URL没有以“.jsp”结尾),但静态文件处置惩罚器会设法把URL映射到精确的文件名字(再一次解码URL)。

别的,许多Web办事器和JSP实现都带有示范脚本,这些示范脚本经常包孕安然隐患。在把办事器支配到一个不无恶意的情况(即Internet)之前,禁止对所有这些脚本的造访有利于安然。

简而言之,JSP开拓者应该清楚:在自己正在开拓的平台上,当前有哪些安然隐患。订阅BUGTRAQ和所有供应商供给的邮件列表是跟踪这类信息的好措施。

停止语

JSP和任何其他强大年夜的技巧一样。假如要包管被支配系统的安然和靠得住,利用JSP时必须胆小如鼠。在这篇文章中,我们简要地评论争论了JSP脚本中经常呈现的代码和设置设置设备摆设摆设级安然问题,提出了低落由此带来的安然风险的建议。

您可能还会对下面的文章感兴趣: