Chinaunix
标题:
Apache与Resin组合暴露源代码的分析及解决方案
[打印本页]
作者:
ccnsa
时间:
2005-07-03 13:54
标题:
Apache与Resin组合暴露源代码的分析及解决方案
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)
作者:
ability
时间:
2006-03-03 10:19
我也遇到这个问题,汗!!!
现在被人骂死~~!!!
作者:
xy-coordinate
时间:
2006-03-21 12:37
字体设置的太大!
看得累!
作者:
jhsea3do
时间:
2006-03-21 22:04
楼猪把字改小点儿...
作者:
谭先生
时间:
2007-05-22 10:35
把jsp目录和html分开目录存放,没有这个问题
作者:
tinyspace
时间:
2008-01-09 17:34
我试了半天,在windows下和linux下都可以避免这个问题啊。
应该是你的配置有问题。
我的配置如下:
LoadModule caucho_module /usr/local/apache2/modules/mod_caucho.so
<IfModule mod_caucho.c>
ResinConfigServer localhost 6802
CauchoConfigCacheDirectory /tmp
</IfModule>
IfModule 好像得有
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2