分享
 
 
 

用Java Applet保护网页的缺陷

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

作者:张波< mailto:zhangbo@nsfocus.com >

主页:http://www.nsfocus.com

有不少主页作者喜欢用一些Java Applet来保护一些比较敏感的页面,比如给某个页面加上密码等。首先我们注重到两个事实:1、由于Java Applet是要下载到客户端执行的,所以任何人都可以得到其*.class文件,从而可以利用Java反编译器或者反汇编器对其进行逆向工程,从而分析出其中所用到的算法和涉及到的隐藏的URL;2、另外,Java Applet能够读取的URL也是任何人都可以读取的。这是用Java Applet做网页保护的先天性的缺陷。下面举两个例子来说明。

一、islogin.class

islogin.class的正式名称是Applet Web PassWord(http://shareit1.element5.com/programs.Html?prodUCtid=106801&language=English&reseller=IS)。其保护方式为:先将用户名、密码、正确的URL(即所要保护的页面的URL)经过加密之后嵌入到html源码中,作为启动该applet的参数。当访问者输入正确的用户名和密码之后,该applet才把正确的URL显示给来访者,这样只有经过身份认证的来访者才能看到被保护的页面的URL。

下面是一个例子,其中user1、user2就是密文。Applet Web Password的发行包里面带有一个小程序专门根据用户名、密码、被保护的URL生成相应的密文。

<applet code="islogin.class" width="280" height="110">

<param name="GENERATOR" value="Applet Web Password 2, http://software.ktc.lt">

<param name="general" value="1651216777215username:password:LOG INhttp://www.somewhere.com/password.htm">

<param name="user1" value="#lppprqrx\]M3D2Oq\t=pdzy~#g!!{ys##yl`ji~xo##me!pgc">

<param name="user2" value="olbh##~mhk##fpcrSlhlbfpee#u??#lrig}??5qhqE$8(????">

<param name="checkpoint" value="2">Your browser doesn't support Java, <br>

or Java capability is turned off.<br>

You are unable to login with Applet Web Password.

</applet>

可见,这种保护方式有先天缺陷。因为嵌有该applet的html的源码是任何人都可以察看的,这样可以得到用户名、密码和URL的密文。而该applet的class文件也可以下载到本地对其解码算法进行分析。有了密文和解码算法,自然可以轻易地得到明文(其实也可以分析Applet Web Password中带的那个加密程序的加密算法,从而找出解码算法,因为它必须采用可逆算法才能恢复要保护的URL),从而直接得到被保护的URL。

经过分析,发现其解码算法非常简单,所以这个applet根本不具实用价值。

下面附上解码程序。其中Encrypted是密文,Decrypted是解出来的明文。

void __fastcall TForm1::OnDecodeClick(TObject *Sender)

{

char s[1024];

char ac[1024];

int i, j, Total;

char Key[]= "Default user name";

Total = Encrypted->GetTextBuf(s, 1024);

if (Total == 0)

{

return;

}

for(i = 0, j = 0; i < Total; i++)

if(s[i] == '#')

{

if(s[i + 1] == '#')

{

ac[j] = '#';

j++;

i++;

} else

if(s[i + 1] == 's')

{

ac[j] = ' ';

j++;

i++;

} else

if(s[i + 1] == 'a')

{

ac[j] = '&';

j++;

i++;

} else

if(s[i + 1] == 'l')

{

ac[j] = '<';

j++;

i++;

} else

if(s[i + 1] == 'q')

{

ac[j] = '"';

j++;

i++;

} else

if(s[i + 1] == 'g')

{

ac[j] = '>';

j++;

i++;

} else

if(s[i + 1] == 'u')

{

ac[j] = '\177';

j++;

i++;

} else

{

MessageBox(0, "Input error!", "Error", MB_OK MB_ICONERROR);

return;

}

} else

{

ac[j] = s[i];

j++;

}

j = 0;

for(i = 0; i < Total; i++)

{

char c = Key[j];

c >>= 3;

ac[i] = (char)(ac[i] ^ c);

if(j < lstrlen(Key) - 1)

j++;

else

j = 0;

}

ac[Total] = 0;

Decrypted->SetTextBuf(ac);

}

二、PassMaster.class

这个applet的保护方式为:把用户名、密码和要保护的URL以明文形式保存在Web服务器的password.log文件中。Applet初始化的时候要读取密码文件,即password.log要被读到客户端浏览器的cache里,则它必须被配置成任何人都可以读取的,而且它与applet放在同一虚拟目录下。这样就没有秘密可言了。假定applet的URL为

http://www.somewhere.com/PassMaster.class,则只需要在浏览器中输入http://www.somewhere.com/password.log就可以把密码文件存盘,或者直接在浏览器的cache中可以搜索到password*.log。下面是密码文件的样本:

name: = "guest";

password: = "guest";

URL: = "demo.html";

name: = "guest";

password: = "test";

URL: = "done.html";

END_FILE

下面是它操作密码文件的代码片断:

public void parseFile()

{

_fld0102.setText("Reading password log. . .");

try

{

URL url = new URL(_fld0108.getCodeBase(), "password.log");

.........

}

即使网站治理员修改了密码文件的存放位置并对密码文件进行了变换,还是可以得到被保护的URL的明文(根本不需要关心用户名和密码),因为我们可以将applet的class文件下载回来分析其所操作的密码文件以及解码算法。

通过搜索引擎,我们可以找到一些嵌有上述applet的页面。由于Java Applet在保护网页的机制方面有先天性缺陷,因此建议不要采用这种相对来说比较偷懒的办法。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有