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文件如  ,就会返回java.servlet.ServletEception: java.io.FileNotFoundEception:  c:webappfadssad.jsp  (???????????)这样的错误,这样就可以知道你网站在c:webapp目录下,也许一般人不太在意,但是对于一个黑客来说足够了。

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

解决方法

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

结束语

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

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

  1. java共享租车信息管理系统jsp源码

    介绍: java web项目共享租车jsp源码,基于servlet+jsp+jdbc的后台管理系统,包含5个模块:汽车账户部管理.租车账户部管理.汽车信息管理表.租车记录表.租车租聘表.功能完整,均能 ...

  2. java 留言板源码,JSP留言板的JSP源码操作实施

    JSP留言板的JSP源码操作实施 很多JSP编程的爱好者都是出于要做网站的目的,那么网站的PR值就很重要网站的PR值全称为PageRank),是google搜索排名算法中的一个组成部分,级别从1到10 ...

  3. jsp源码商城系统Myeclipse开发mysql数据库servlet开发java编程计算机网页项目

    一.源码特点   JSP 源码商城系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统采用serlvet+dao+bean  mvc 模式,系 ...

  4. springmvc返回JSP源码

    问题:请求返回jsp源码 解决:将项目的web.xml中 <servlet-mapping> 下的<url-pattern>/*</url-pattern>改为&l ...

  5. 【无标题】servlet配置后,浏览器上总显示jsp源码的问题

    这两天在idea,servlet配置后,浏览器上总显示jsp源码的问题,起初我是以为因为自己写的jsp要请求servlet页面,但是想想,那样的话浏览器也影响该先显示jsp吧,我搜了一下,jsp页面由 ...

  6. JSP源码如何在本机调试运行?

    我们从网上下载的JSP源码如何在本机调试运行呢? 一下就介绍一下本人的配置运行过程. 1:首先,你的机子得配备以下工具: eclipse+myeclipse: tomcat: mysql: mysql ...

  7. springmvc浏览器显示jsp源码解决办法

    url-pattern问题 spring用到forward("/WEB-INF/jsp/*.jsp") 而forward当然是又要经过web.xml的映射的, 然后,在URL匹配时 ...

  8. 150套JSP源码--免费下载

    150套JSP源码 免费下载  适用于学习 百度云下载地址: 链接:https://pan.baidu.com/s/1J7-O9k6o8f5dFh71VzCpuA  提取码:zb7p 如下载地址失效请 ...

  9. springboot项目访问首页时返回jsp源码

    springboot项目访问时返回jsp源码,如下图: 解决方案:引入jsp解析依赖 <dependency><groupId>org.springframework.boot ...

最新文章

  1. 独家 | 使用深度神经网络在Oculus Quest上进行准确的手部追踪
  2. 【Android 插件化】Hook 插件化框架 ( 反射工具类 | 反射常用操作整理 )
  3. C语言 | 编程实现5
  4. 基于深度学习的视频预测研究综述
  5. php+tp框架+API,【路由】利用Thinkphp路由实现API开发版本管理
  6. php 内容编码错误,PHP输出缓冲,ob_gzhandler引起的内容编码错误?
  7. Tomcat--安装与部署(一)
  8. 学以致用——使用莱斯利矩阵模型预测蠵龟种群数量的演变(Demographics of the Loggerhead Sea Turtle using Leslie population model)
  9. 【大数据干货】基于Hadoop的大数据平台实施——整体架构设计
  10. LINUX检测网线热插拔事件
  11. 下载知乎等网站视频小技巧
  12. networks.demo_dev.ipam.config value Additional properties are not allowed (‘gateway‘ was unexpected)
  13. c语言c4700错误,C编译错误,运行错误以及常见问题。
  14. 使用certbot在nginx搭建HTTPS 以及 阿里云负载均衡HTTPS搭建
  15. unity3D用什么语言开发好?
  16. 小虫电商,你永远学不会!
  17. SaaS、PaaS、IaaS简介
  18. 计算机网络可靠传输是什么意思,可靠传输
  19. 计算机网络思维导图+《王道考研》习题总结
  20. Vue可视化创建项目

热门文章

  1. 微信小程序整合百度文字识别OCR
  2. 经纬度转直角坐标c语言,坐标转换从经纬度坐标到大地坐标及源码(7页)-原创力文档...
  3. 【华人学者风采】杨华中 清华大学
  4. 广域网技术PPP、PPPoE、MPLS、SR(分段路由技术)(HCIA)
  5. mybatis-plus日志设置只打印sql,不打印结果集
  6. 做SEO优化第二步:背熟所有SEO基础名词
  7. 程序员在测试面前最后的倔强 | 每日趣闻
  8. JavaSSM框架学完,手写一个汽车租赁系统,真NE!
  9. 【vulhub】phpmyadmin
  10. office中的域、控件、com组件、宏和VBA