国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

用Java Applet保護網頁的缺陷

2019-11-18 15:26:52
字體:
來源:轉載
供稿:網友


作者:張波< 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在保護網頁的機制方面有先天性缺陷,因此建議不要采用這種相對來說比較偷懶的辦法。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大名县| 海城市| 泸西县| 绍兴县| 阿坝县| 米易县| 祥云县| 积石山| 龙陵县| 南昌市| 金湖县| 仙居县| 楚雄市| 台湾省| 郧西县| 台中市| 嘉祥县| 丘北县| 梁山县| 佛山市| 田东县| 阿拉善右旗| 广灵县| 年辖:市辖区| 福贡县| 南京市| 福泉市| 鄂州市| 商丘市| 崇仁县| 龙胜| 连平县| 涞源县| 调兵山市| 垣曲县| 衡南县| 武威市| 晋宁县| 竹溪县| 宜阳县| 葫芦岛市|