关于JSP源码泄漏问题的总结分析

www.2cto.com:09年的一篇老文章了

JSP编程语言自从推出之日起,由于它的快速、平台无关、可扩展、面向对象等特性得到了越来越广泛的应用,越来越多的厂家开发出了各种各样的支持平台如IBM 公司的WebSphere、BEA公司的WebLogic等等,也有越来越多的网站开始将自己的平台架构在JSP 环境中。

但是随之而来的就是一系列的安全问题,如JSP源码泄露、远程任意命令执行漏洞等等,一些用JSP做的网站,由于存在各种各样的漏洞,可以被黑客轻松的下载程序的源代码,对网站的安全构成威胁。

造成JSP源码泄露的原因

服务器漏洞是安全问题的起源,黑客对网站的攻击也大多是从查找对方的漏洞开始的。所以只有了解自身的漏洞,网站管理人员才能采取相应的对策,阻止外来的攻击。

虽然JSP也是一种web编程语言,但是它和其它的web编程语言如PHP、ASP的工作机制是不一样的。

首次调用JSP文件其实是执行一个编译为Servlet的过程。试图下载JSP源代码的人(比如黑客)往往利用JSP的各种漏洞,让JSP文件在编译前被浏览器当作一个文本或其它文件发送给客户端,或在JSP装载的时候不去执行编译好的Servlet而直接读JSP的内容并发送给客户端,从而让源代码一览无余。

JSP源代码泄漏的几种类型

源代码暴露类别主要指的是程序源代码会以明文的方式返回给访问者.

我们知道不管是JSP还是ASP、PHP等动态程序都是在服务器端执行的,执行后只会返回给访问者标准的html 等代码。这是理论上的东西,实际运行起来由于服务器内部机制的问题就有可能引起源代码暴露的漏洞,简单的例子是只要在程序文件名后加几个简单的字符就可能获得程序代码,如常见微软ASP 的global.asa+.htr、XXXX.asp%81等等漏洞。

一、添加特殊后缀引起JSP源码泄露

在JSP中也存在着和asp这些漏洞类似的问题,如IBM Websphere Application Server 3.0.21、BEA Systems Weblogic 4.5.1、Tomcat一等JSP文件后缀大写漏洞;JSP 文件后加特殊字符如Resin1.2的%82、../漏洞;ServletExec的%2E、+漏洞、%2E、+、%2B、 、%5C、%20、%00 等。

黑客如果利用该漏洞,将导致泄露指定的JSP文件的源代码。例一:使用下面的任意一个URL请求将输出指定的JSP文件的源代码:

1)http://target/directory/jsp/file.jsp.

2)http://target/directory/jsp/file.jsp%2E

3)http://target/directory/jsp/file.jsp

4)http://target/directory/jsp/file.jsp%2B

5)http://target/directory/jsp/file.jsp

6)http://target/directory/jsp/file.jsp%5C

7)http://target/directory/jsp/file.jsp%20

等等。

例二,在Tomcat一下,在浏览器中本来可以正常解释执行的是http://localhost:8080/inde.jsp,但是如果将inde.jsp改为inde.JSP或者inde.Jsp等等试试看,你会发现浏览器会提示你下载这个文件,下载后源代码可以看个一干二净。

原因是JSP是大小写敏感的,Tomcat只会将小写的JSP后缀的文件当作是正常的JSP文件来执行,如果大写了就会引起Tomcat将inde.JSP当作是一个可以下载的文件让客户下载。老版本的WebLogic、WebShpere等都存在这个问题,现在这些公司或者发布了新版本或者发布了补丁解决了这问题。

解决办法

解决这种由于添加后缀引起的源代码泄漏有两种方法,一种方法是在服务器软件的网站上下载补丁;另外一种方法是在服务器设置中添加一些映射如.JSP 、.Jsp、.jsp%2E等,将他们映射到一个自己写的servlet,这个Servlet的唯一功能就是将请求导向一个自定义的类似404 not found的出错页面,不同的服务器设置的地方也不同。

如果没有使用任何静态页面或图像,可以配置一个默认的 servlet,并将"/"映射到这个默认的 servlet。这样当收到一个未映射到某个 servlet 的 URL 时,这个默认的servlet 就会被调用。在这种情况下,默认的 servlet 可以仅仅返回"未找到文件"。如果使用了静态的页面或图像,仍然可以作这样的配置,但是需要让这个默认的servlet 处理对合法的静态页面和图像的请求。

另一种可能就是将*.jsp+、*.jsp.和*.jsp等映射到一个 servlet,而该servlet只是返回"未找到文件"。对于*.jsp%00和*.jsp%20这样的情况,映射应以未经编码的形式输入。例如,对于*.jsp%20的映射应输入"*.jsp "。注意%20被转换成一个空格字符。

二、插入特殊字符串引起JSP源码泄露

插入特殊字符串引起的漏洞有很多,例如BEA  WebLogic Enterprise 5.1中,文件路径开头为 "/file/" 的漏洞、IBM WebSphere 3.0.2中"/servlet/file/"文件开头漏洞等等。

如果在IBM WebSphere 3.0.2中的一个请求文件的 URL 为"login.jsp":http://site.running.websphere/login.jsp,那么,用户在访问http://site.running.websphere/servlet/file/login.jsp  时将看到这个文件的源代码。

原因是由于IBM WebSphere 3.0.2是调用不同的 servlets 对不同的页面进行处理,如果一个请求的文件是未进行注册管理的,WebSphere 会使用一个默认的 servlet 调用。如果文件路径以"/servlet/file/"作开头这个默认的 servlet 会被调用这个请求的文件会未被分析或编译就显示出来。

解决方法

在服务器软件的网站下载最新的补丁。

三、路径权限引起的文件JSP源码泄露

这种漏洞在正常的JSP漏洞中没有反映出来,但是我们知道,大部分的JSP应用程序在当前目录下都会有一个WEB-INF目录,这个目录通常存放的是JavaBeans编译后的class 文件,如果不给这个目录设置正常的权限,所有的class就会曝光。

也许有人认为class是经过编译的,就算被下载也没有什么关系,但是现在class 反编译为java代码的软件也很多,采用反编译软件对下载的class文件反编译后,和原始的java文件几乎一模一样,连变量名都没有变,还可以正常使用。

更大的安全问题是,有的软件开发人员把数据库的用户名密码都写在了java代码中,现在一反编译谁都能看到数据库的重要信息。通过数据库的远程连接功能,可以轻松的进入到数据库中,所有信息将全部被别人掌握。

解决方法

有一个方法可以有效地解决由于路径权限引起的代码泄漏问题,就是将ASP程序单独放置一个目录,设置该目录上的用户权限只能执行不能读取。在JSP环境下同样可以通过设置服务器的环境来解决这个问题:将一些比较重要的目录如WEB-INF、classes等设置上访问的权限,不允许读而取只允许执行。以Apache 下解决为例,可以在httpd.conf文件中添加一目录WEB-INF并设置Deny from all等属性。

另一种解决方法就是在每个重要目录下添加一个默认起始页面如index.htm等,这样读取目录就会返回给访问者这个文件而不是其它了。

相比较而言,建议采用第一种方法。

更为重要的是密码的保存问题,在ASP 开发中,可以将密码文件保存在系统目录如WINNT 下,然后用一个com来读取这个文件,这样就算看到了ASP源代码也不知道数据库信息了。在JSP中我们也可以写一个property文件,放置在WINNT系统目录下,然后用Bean来读取数据库信息,这样通过源代码知道了数据库信息存在WINNT中的.property文件里面,但也很难访问它,这样就算源代码被人知道起码数据库是安全的。

四、文件不存在引起的绝对路径JSP源码泄露

这个问题现在已经出现了很多,因为微软IIS 中也有比较多的类似问题,如微软IIS5.0中的*.idc暴露绝对路径漏洞。同样的这些问题现在出现在JSP环境中,这个漏洞暴露了web程序的绝对硬盘地址,和其他漏洞结合就具有比较大的危害了。

例如:在特定的服务器软件下,访问一个不存在的JSP文件如 <http: class="keylink" fdasfas.jsp="" localhost:8080="">,就会返回java.servlet.ServletEception: java.io.FileNotFoundEception: c:webappfadssad.jsp (???????????)这样的错误,这样就可以知道你网站在c:webapp目录下,也许一般人不太在意,但是对于一个黑客来说足够了。

原因是由于负责JSP 执行的相关Servlet中处理异常的时候没有过滤掉这种情况。

解决方法

对于因为文件不存在引起的绝对路径暴露问题,有两种解决方法。一种方法是下载最新的补丁。另一种方法是找到服务器软件的JSP 执行映射Servlet文件(当然是class 后缀的),将它用软件反编译,在反编译后的源代码中找到处理Eception的方法,然后将方法中的处理部分全部注释掉,并将请求导向到一个自定义的出错页面中,这样问题就解决了。

结束语

通过上面内容我们可以看出,存在着很多安全上的JSP源码泄露问题的,客观的说,服务器软件的开发商在内部测试中不可能将系统中的所有BUG找出来,即使发布了软件后,被发现的JSP源码泄露也只会是其中的很小一部分,将来还会不断的有新的安全问题出现,所以我们必须时刻提高警惕,并注意自己网站的安全


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
## 项目功能介绍 本项目是一个基于Java和JSP技术的网上书店系统,旨在为用户提供一个便捷、高效的在线购书平台。系统具备丰富的功能,包括用户注册与登录、书籍浏览与搜索、购物车管理、订单生成与管理、用户个人信息管理等。通过简洁直观的用户界面和高效的后台管理系统,实现了读者与图书之间的互动和购买流程的顺畅。 ### 1. 用户模块 - **注册与登录**:新用户可以通过注册功能创建账户,已有用户可以通过登录功能访问个人账户。 - **个人信息管理**:用户可以查看和编辑自己的基本信息,如姓名、地址、电话等。 - **书籍浏览与搜索**:用户可以浏览网站提供的各类书籍,通过关键词搜索功能快速找到感兴趣的书籍。 - **购物车管理**:用户可以将感兴趣的书籍加入购物车,对购物车中的书籍进行查看、修改和删除操作。 - **订单生成与管理**:用户可以将购物车中的书籍生成为订单,并查看自己的订单历史和订单详情。 ### 2. 管理员模块 - **书籍管理**:管理员可以添加、修改和删除书籍信息,包括书名、作者、价格、库存等。 - **用户管理**:管理员可以查看和管理用户信息,包括用户名、密码、联系方式等。 - **订单管理**:管理员可以查看和处理用户订单,包括确认订单、发货、退款等操作。 - **数据统计**:管理员可以查看网站的访问量、销售额、用户活跃度等数据,以便进行运营分析和决策。 ### 3. 系统特点 - **安全性**:采用加密技术保护用户密码,防止数据泄露。 - **稳定性**:采用成熟的Java和JSP技术,确保系统稳定运行。 - **可扩展性**:系统采用模块化设计,便于二次开发和功能扩展。 - **易用性**:界面简洁明了,操作流程清晰,易于用户上手。 本项目源码可以作为二次开发的基础,根据实际需求进行定制和扩展,以满足不同场景下的需求。通过本项目,可以为用户提供一个高效、便捷的网上购书体验,同时为开发者提供一个实用的项目参考。
### 回答1: Chrome插件 jsp源码是指在Chrome浏览器中使用jsp语言编写的插件源代码JSP是JavaServer Pages的缩写,是一种基于Java的服务器端技术。使用JSP可以将Java代码嵌入到HTML页面中,实现动态生成网页内容的功能。 当我们需要在Chrome浏览器中添加新的功能或扩展现有功能时,可以使用Chrome插件。Chrome插件是一种用于增强浏览器功能的软件模块。通过编写插件,可以在浏览器中添加自定义的功能,如增加菜单选项、改变页面样式、截取网络请求等等。 在编写Chrome插件时,可以使用多种编程语言,包括JavaScript、HTML、CSS等。如果我们希望在插件中使用Java语言编写的服务器端代码,可以选择使用JSP。 具体来说,使用jsp语言编写Chrome插件源码可以让我们在插件中利用Java的强大功能,比如处理复杂逻辑、操作数据库、实现用户认证等。同时,通过嵌入Java代码到HTML页面,我们可以更加灵活地生成插件的展示内容。 总之,Chrome插件 jsp源码是一种在Chrome浏览器中使用jsp语言编写的插件源代码,通过编写插件源码,我们可以为浏览器增加自定义的功能和特性。 ### 回答2: Chrome插件JSP源码是指用JSP语言编写的用于Chrome浏览器的扩展程序代码。JSP是Java服务器页面的缩写,它是一种用于开发服务器端网页的Java技术。Chrome插件则是用于增强Chrome浏览器功能的小程序。 JSP源码通常用于开发Chrome插件的后端部分,它用于处理插件的逻辑处理和数据操作。JSP源码中包含了服务器端脚本代码,可以通过JSP标签和Java代码实现与用户的交互,包括接收用户的请求、处理请求和返回响应等功能。 JSP源码一般包括以下的几个方面内容:界面展示部分,即插件的前端页面设计;逻辑处理部分,如用户点击按钮时的事件响应;数据交互部分,包括与服务器进行数据交互的代码;和插件设置部分,如插件的配置页面和选项设置等。 开发人员可以在JSP源码中根据需求添加自定义的功能和逻辑,如调用Chrome API实现浏览器的特定操作、使用AJAX技术实现异步请求和响应、添加自定义样式和脚本等。 总之,Chrome插件JSP源码是用于开发Chrome插件的后端代码,它使用JSP语言实现逻辑处理和数据交互。通过JSP源码,开发人员可以定制和扩展Chrome浏览器的功能,使用户能够享受更加个性化的浏览体验。 ### 回答3: Chrome插件JSP源码是指用JSP(Java Server Pages)语言编写的用于扩展Chrome浏览器功能的插件代码。JSP是一种基于JAVA技术开发的动态网页开发技术,它允许在HTML页面中嵌入Java代码,通过与服务器的交互实现动态生成页面内容。 Chrome插件是一种用于增强和定制Chrome浏览器功能的软件,可以通过插件来修改和增加浏览器的行为,以满足用户的特定需求。Chrome插件JSP源码主要包含与插件功能相关的JSP和其他前端代码,以及后端代码用于处理与服务器的交互。这些源码通常包括插件的配置文件、前端页面的设计和布局、与服务器进行数据交互的逻辑、事件处理、响应式设计等等。 编写Chrome插件JSP源码的过程中,首先要确定插件的功能需求,然后根据需求设计并编写前端页面的布局和逻辑,同时编写后端的JSP代码与服务器进行交互。在代码编写完成后,还需要对插件进行测试并进行必要的调试,以确保插件能够正常运行。 总之,Chrome插件JSP源码是用JSP语言编写的用于扩展Chrome浏览器功能的插件代码,它通过与服务器的交互来实现动态生成页面内容,从而可以实现一些定制和增强浏览器功能的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值