忘记密码   免费注册 查看新帖 | 论坛精华区
ChinaUnix.net
  平台论坛 博客 微博 读书 人才 精华 文库 自测 | 频道操作系统 开发 数据库 存储 服务器 网络 IT新闻 Linux 下载 Power用户组
最近访问板块 发新帖
查看: 5931 | 回复: 5

Apache与Resin组合暴露源代码的分析及解决方案 [复制链接]
更多

帖子
19
主题
10
精华
0
可用积分
19
专家积分
0
在线时间
0 小时
注册时间
2004-12-14
最后登录
2006-09-14
论坛徽章:
0
发表于 2005-07-03 13:54:41 |显示全部楼层
Apache 2.0.54 与 Resin 3.0.13 整合完成了,也能顺利解释jsp。但是如果resin因故障死掉,Apache会把Jsp的源文件输出到Browser出来。

开始以为是 Resin Bug 或者是 Resin 与 Apache 版本冲突,测试了各种不同的版本,均有这个问题。

试图通过Apache的配置文件httpd.conf禁止客户直接浏览.jsp文件,也找不到解决办法。

只好把目光盯在mod_caucho.so上了。

经过几天的通宵鏖战(本人是Liunx新手兼C新手,所以效率很低),对mod_caucho.so的源代码(resin-pro-3.0.13\modules\c\src\)进行了一番分析,初步明白了mod_caucho.so工作原理。

Apache的配置文件载入mod_caucho.so模块,并且定义Resin主机和端口
    LoadModule caucho_module /usr/local/apache/modules/mod_caucho.so
    ResinConfigServer localhost 6802
    CauchoStatus yes
   
mod_caucho.so就开始工作了,mod_caucho.so是怎么工作的呢?好像工作方式有点烂。

mod_caucho.so被apache载入后,会利用HOOK截获Apache的所有http请求,mod_caucho.so取得http请求后,马上连接Resin服务,如果可以连上Resin服务,mod_caucho.so会从Resin服务上取得某些配置信息,即resin可以处理哪些文件或路径,如:xtp,jsp,jspx,WEB-INF等。

接着mod_caucho.so会把客户请求URL和Resin配置信息进行比较,如果相符,mod_caucho.so把客户请求转交给Resin服务处理,如果不符,就把
请求返回给apache处理了。

如果连不上Resin服务,就无法取得相应的配置信息了。mod_caucho.so对客户请求URL和Resin配置信息比较的时候,会把jsp请求拒之门外,直接返回给Apache。

似乎mod_caucho.so对Resin配置信息有短时间的缓存,比如Resin死掉或者停掉的短时间内,mod_caucho.so还是会把jsp请求提交给Resin处理,由于此时Resin已经停止服务,所以浏览器上会出现下列字样

Service Temporarily Unavailable
The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.

但稍后一点时间(一两分钟内),mod_caucho.so就没有Resin配置信息了,也就会把所有的jsp请求返回给Apache。

Apache本身不能解析jsp,只好把jsp源文件作为普通文档返回给Browser了。

是不是觉得mod_caucho.so设计得很烂啊,这种东西居然还要卖钱。

干吗不能直接从conf配置文件取得相关信息,或者在httpd.conf中指定解析文件类型,还要每次从Resin服务上去取。既然可以在httpd.conf中指定
    ResinConfigServer localhost 6802
    CauchoStatus yes
为什么不再加几行,强制某些类型的请求由Resin处理,并禁止由Apache处理。
(我不知道mod_caucho.so是否已经具备上述功能噢,如果具备,请高手指正,拜谢)

能不能改写mod_caucho.so源代码呢,改成让mod_caucho.so直接从文件读取,或者在httpd.conf中定义或者把Resin可解析哪些文档的信息直接定义程序里面(这样最简单),mod_caucho.so取得客户请求后,不用先去连接Resin服务,直接比较是否属于resin处理范围,如果不是返回给apache处理,如果属于resin处理范围,并且可以连上resin服务,那么交给Resin处理,如果属于resin处理范围,但是不能连上resin服务,就给浏览器返回一个简单的提示。

改写mod_caucho.so源代码的工作就请哪位 Liunx C 高手来完成吧!

本人两天只分析了部分mod_caucho.so源代码,是新手,效率很低。

mod_caucho.so源代码主要文件
resin-pro-3.0.13\modules\c\src\apache2\mod_caucho.c
resin-pro-3.0.13\modules\c\src\common\config.c
resin-pro-3.0.13\modules\c\src\common\stream.c

关键函数
mod_caucho.c:
static int cse_dispatch(request_rec *r)

config.c:
resin_host_t * cse_match_request(config_t *config, const char *host, int port, const char *uri, int unescape, time_t now)
static resin_host_t * cse_is_match(config_t *config, const char *raw_host, int port, const char *raw_uri, int unescape, time_t now)

Rank: 1

帖子
213
主题
23
精华
0
可用积分
209
专家积分
0
在线时间
18 小时
注册时间
2002-08-01
最后登录
2011-09-06
论坛徽章:
0
发表于 2006-03-03 10:19:33 |显示全部楼层
我也遇到这个问题,汗!!!
现在被人骂死~~!!!
CDN联盟--网站加速联盟--绿色联盟!
www.cdnunion.com
MSN:hwggood@hotmail.com
qq群:21403981

Rank: 2

帖子
1802
主题
170
精华
5
可用积分
1811
专家积分
0
在线时间
381 小时
注册时间
2005-07-15
最后登录
2011-12-31
论坛徽章:
0
发表于 2006-03-21 12:37:28 |显示全部楼层
字体设置的太大!
看得累!
书山有路勤为径,苦海无涯苦作舟!

Rank: 3Rank: 3

帖子
1625
主题
67
精华
4
可用积分
2471
专家积分
0
在线时间
170 小时
注册时间
2002-12-22
最后登录
2011-08-07
论坛徽章:
0
发表于 2006-03-21 22:04:45 |显示全部楼层
楼猪把字改小点儿...

帖子
7
主题
1
精华
0
可用积分
14
专家积分
0
在线时间
0 小时
注册时间
2004-06-11
最后登录
2008-08-21
论坛徽章:
0
发表于 2007-05-22 10:35:38 |显示全部楼层
把jsp目录和html分开目录存放,没有这个问题
阿海de空间:http://hctan.blog.163.com/

Rank: 1

帖子
1
主题
0
精华
0
可用积分
489
专家积分
0
在线时间
1 小时
注册时间
2006-05-31
最后登录
2009-10-10
论坛徽章:
0
发表于 2008-01-09 17:34:00 |显示全部楼层
我试了半天,在windows下和linux下都可以避免这个问题啊。
应该是你的配置有问题。

我的配置如下:
LoadModule caucho_module /usr/local/apache2/modules/mod_caucho.so
<IfModule mod_caucho.c>
ResinConfigServer localhost 6802
CauchoConfigCacheDirectory /tmp
</IfModule>

IfModule 好像得有
您需要登录后才可以回帖 登录 | 注册

北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP