關(guān)于網(wǎng)頁(yè)源代碼屏蔽 |
很早就想寫一篇關(guān)于網(wǎng)頁(yè)源代碼屏蔽的文章,。是因?yàn)榻?jīng)常編出些JS腳本的之后,,在沾沾自喜的同時(shí),也在擔(dān)心源代碼會(huì)被人家看到,,盜用我的腳本,。所以一直以來(lái),我都在盡力維護(hù)我的網(wǎng)頁(yè)源代碼的安全,。雖然目前還沒(méi)有找到完全安全的屏蔽方法(也就是說(shuō),,這些方法在我想出來(lái)的同時(shí),自己已經(jīng)知道其弱點(diǎn)和破解方法了),,但是,,我這里有很多屏蔽的思路,,來(lái)總結(jié)一下。 眾所周知,,要保護(hù)一個(gè)頁(yè)面,,最基礎(chǔ)的就是要屏蔽右鍵。而現(xiàn)在網(wǎng)頁(yè)上用得最多的是function click(),,即下面這段代碼: 〈script〉 function click(){ if(event.button==2){ alert( ’本網(wǎng)站歡迎您 !!’); } } document.onmousedown=click 〈/script〉 但是這種屏蔽方法的破解方法也是眾所周知的,。那就是連續(xù)單擊鼠標(biāo)左鍵和右鍵便又可以看到右鍵菜單了。但是,,我見(jiàn)過(guò)一種很好的屏蔽右鍵的方法,。它的原理和上面所說(shuō)的不同。它并不是用JS來(lái)編寫的腳本,,而是利用定義網(wǎng)頁(yè)屬性來(lái)起到限制的作用,。而且,在屏蔽中應(yīng)該盡量的避開(kāi)使用JS腳本,。因?yàn)橹灰獮g覽者把IE里的javascript腳本禁用了,。那么一切屏蔽都白費(fèi)。 那么繼續(xù)說(shuō)那種通過(guò)修改網(wǎng)頁(yè)屬性的屏蔽右鍵的方法,。這種方法利用了HTML里的〈body〉來(lái)作修改,,它只有以下短短的一行代碼: 〈body oncontextmenu=self.event.returnValue=false〉 這里,定義了oncontextmenu,。使得右鍵的值為false,,起到了屏蔽右鍵的效果。現(xiàn)在,,再試試看剛才的破解方法,,已經(jīng)不行了。左右鍵連擊已經(jīng)不能再打開(kāi)右鍵菜單,。不但是這個(gè),,再試試看其他的方法。無(wú)論你怎樣的亂點(diǎn),,右鍵都沒(méi)有用,。因?yàn)樵谶@個(gè)網(wǎng)頁(yè)里,右鍵已經(jīng)不存在了,。對(duì)于一個(gè)不存在的功能鍵,,你又能做什么呢? 但是,,屏蔽了右鍵還不能解決問(wèn)題,。如果我要復(fù)制一段文字,或是一張圖片。那么,,把它選中后用ctrl+C 再用 ctrl+V不就可以復(fù)制粘貼了嘛,。對(duì)了,接下來(lái)要講的,,就是屏蔽左鍵(什么,?屏蔽左鍵?那這個(gè)網(wǎng)頁(yè)不就差不多廢掉了,?別急,,沒(méi)說(shuō)完呢,左鍵只有一項(xiàng)功能是很討厭的)的選定功能,。 那么,,如上所說(shuō),用JS來(lái)屏蔽是沒(méi)有用的,,治標(biāo)不治本的,。那么,我們就還用網(wǎng)頁(yè)的最基礎(chǔ)的語(yǔ)言:HTML來(lái)定義吧,。還是老招數(shù),,定義〈body〉。這次用的參數(shù)是:onselectstart,。就是左鍵選定的參數(shù),。代碼如下: 〈body onselectstart="return false"〉 這樣,左鍵選定功能就給輕易屏蔽了,。原理和上面的一樣?,F(xiàn)在,再用你的左鍵選擇任意內(nèi)容把,,已經(jīng)沒(méi)有用了,。自然也不能ctrl + C,ctrl +V了,。那么,現(xiàn)在我們來(lái)把這兩部分合并起來(lái),。徹底控制左右鍵?。?nbsp; 〈body oncontextmenu=self.event.returnValue=false onselectstart="return false"〉 現(xiàn)在,左右鍵的問(wèn)題總算是解決了吧,。 好,,現(xiàn)在我們來(lái)看另一個(gè)問(wèn)題。大家都知道,,在IE瀏覽器的菜單欄里的“查看”項(xiàng)里,。有一個(gè)“查看源代碼”選項(xiàng)。這么一來(lái),雖然我們屏蔽了右鍵里的查看源代碼,。但是,,只要用菜單欄里的查看源代碼,還是可以看到源代碼的,。這可怎么辦呢,? 我最初的想法是用框架來(lái)避開(kāi)源代碼的查看。也就是說(shuō),,只要一個(gè)網(wǎng)頁(yè)是嵌在框架里的,,那么在菜單欄里選擇查看源代碼查看到的只是框架網(wǎng)頁(yè)的源代碼。一般格式如下: 〈html〉 〈head〉 〈meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312"〉 〈title〉本網(wǎng)站標(biāo)題〈/title〉 〈/head〉 〈frameset rows="47,*" framespacing="0" border="0" frameborder="0"〉 〈frame name="header" scrolling="no" noresize target="main" src="top.htm"〉 〈frame name="main" src="main.htm" scrolling="auto" target="_self"〉 〈noframes〉 〈body〉 〈p〉此網(wǎng)頁(yè)使用了框架,,但您的瀏覽器不支持框架,。〈/p〉 〈/body〉 〈/noframes〉 〈/frameset〉 〈/html〉 這樣看起來(lái)對(duì)方是沒(méi)有直接看到你的源代碼了,。但是,,如果一個(gè)人要看你的源代碼,那他八成是能看懂的,。如果懂一點(diǎn)HTML的話,,都能看出這兩句是什么意思: 〈frame name="header" scrolling="no" noresize target="main" src="top.htm"〉 〈frame name="main" src="main.htm" scrolling="auto" target="_self"〉 這兩句的意思就是:在header(也就是網(wǎng)頁(yè)頂部)處引用相對(duì)路徑下的top.htm網(wǎng)頁(yè)文件。而在main(也就是占據(jù)網(wǎng)頁(yè)大部分頁(yè)面的位置)處引用相對(duì)路徑下的main.htm網(wǎng)頁(yè)文件,。就這兩點(diǎn)是關(guān)鍵的,,其他就不作解釋了,大家也都懂的,。而上面所講的利用框架來(lái)隱藏源代碼的方法就是將要顯示頁(yè)面放在main部分,。而將header部分的大小設(shè)為0。但是這樣一來(lái),,利用菜單欄里的查看源代碼,,還是能查看到框架網(wǎng)頁(yè)的源代碼。只要看到這兩句,,就知道我們前面用的手法了,。也就是說(shuō),只要將框架網(wǎng)頁(yè)的名字改為目標(biāo)網(wǎng)頁(yè),,便可以用相同的方法直接看到目標(biāo)網(wǎng)頁(yè)的源代碼了,。如:框架網(wǎng)頁(yè):http://www.sina.com.cn/red.htm的源代碼如上,就可以改為Http://www.sina.com.cn/main.htm,。這樣便可直接瀏覽被保護(hù)網(wǎng)頁(yè),,屏蔽源代碼的效果還是沒(méi)有達(dá)到。 那么,,有些人就會(huì)想到,,如果對(duì)方看不到框架網(wǎng)頁(yè)的源代碼,。又何談去直接打開(kāi)被保護(hù)網(wǎng)頁(yè)?對(duì),,這就是接下來(lái)我要講的,。如果要一個(gè)頁(yè)面的菜單欄內(nèi)的查看源代碼失去效用。那最簡(jiǎn)單的辦法就是去掉菜單欄,。而這一點(diǎn)是可以通過(guò)彈出窗口來(lái)實(shí)現(xiàn)的,。之所以不選用超鏈接打開(kāi)無(wú)菜單欄窗口是因?yàn)槟菢訒?huì)暴露目標(biāo)地址,瀏覽者可以直接在瀏覽器中敲入地址,,而繞過(guò)這個(gè)屏蔽的菜單欄,。要使用超鏈接打開(kāi)無(wú)菜單欄窗口,就必須在一個(gè)已受到源代碼屏蔽保障的網(wǎng)頁(yè)中使用相關(guān)鏈接,。 那么,,我們就看看如何利用彈出窗口來(lái)去掉菜單欄。其實(shí),,我們要做的,,就是讓目標(biāo)網(wǎng)頁(yè)在一個(gè)廣告條中打開(kāi)。這個(gè)代碼幾乎每個(gè)大型網(wǎng)站都會(huì)有的,。代碼如下: 〈script〉 〈!-- window.open("red.htm", "red", "resizable=yes,width=500,height=300"); --〉 〈/script〉 這里,,在window.open后的括號(hào)里的第一個(gè)參數(shù)就是彈出窗口所顯示的網(wǎng)頁(yè)的位置,這里例子里是先對(duì)位置下的red.htm網(wǎng)頁(yè)文件,。這時(shí)運(yùn)行便會(huì)談出一個(gè)顯示有red.htm的無(wú)菜單欄的窗口,。好,我們的目的達(dá)到了,。但是,,這個(gè)窗口有一個(gè)缺陷,就是沒(méi)有滾動(dòng)條,。因?yàn)樵谡劤龃翱诘恼Z(yǔ)句:window.open里并沒(méi)有關(guān)于滾動(dòng)條的參數(shù),,(或是我不知道?歡迎高手來(lái)信指出),,所以這里打開(kāi)的網(wǎng)頁(yè)建議只做成網(wǎng)頁(yè)的導(dǎo)航頁(yè),。 但是,用以上方法取消菜單欄,,必須有一個(gè)第二方的網(wǎng)頁(yè)來(lái)作彈出的工作,。那么,這個(gè)用來(lái)彈出窗口的網(wǎng)頁(yè)又成為了一個(gè)問(wèn)題的所在,。舉例來(lái)說(shuō):假設(shè),,我們用一個(gè)index.htm來(lái)作彈出窗口的工作,。也就是打開(kāi)index.htm之后,,會(huì)彈出red.htm的無(wú)菜單欄窗口,。前面我們也提到了,如果知道了一個(gè)網(wǎng)頁(yè)的地址后,,無(wú)論這個(gè)網(wǎng)頁(yè)是否隱藏在無(wú)菜單欄之下,,你都能看到它的源代碼。那么,,不讓這個(gè)red.htm的地址暴露也就成了解決這個(gè)問(wèn)題的關(guān)鍵,。但是,只要這個(gè)index.htm被打開(kāi),,就可以看到源代碼,。但是,不妨反過(guò)來(lái)想想,,如果我們把index.htm給關(guān)起來(lái)呢,?只要在瀏覽者沒(méi)有來(lái)得及查看index.htm之前將它關(guān)閉,就能保住它的源代碼了,。那么,,在這個(gè)index.htm里就有得做些文章了。 那就是,,添加關(guān)閉網(wǎng)頁(yè)的代碼,。 那么,我們就可以用window.close來(lái)關(guān)閉窗口,。代碼如下: 〈script〉 〈!-- window.open(); --〉 〈/script〉 那么,,現(xiàn)在我們把兩部分代碼合并起來(lái)。現(xiàn)在,,得到的效果就是——直接有一個(gè)無(wú)菜單欄的窗口打開(kāi)了,。因?yàn)橛?jì)算機(jī)的處理速度很快,如果我們將這兩段代碼緊接著寫在一起,,那么我們就只能看到新建的窗口,。代碼如下: 〈script〉 〈!-- window.open("red.htm", "red", "resizable=yes,width=500,height=300"); window.close(); --〉 〈/script〉 而原來(lái)的窗口,已在我們無(wú)察覺(jué)的情況下關(guān)閉了,。這樣,,就別說(shuō)查看該網(wǎng)頁(yè)的源代碼了。這里,,加入上面源代碼的網(wǎng)頁(yè)起了一個(gè)跳板的作用,。但是,在這里,,我們要注意幾點(diǎn),。第一,用來(lái)做跳板的網(wǎng)頁(yè)不應(yīng)該命名為index.htm,。將它換一個(gè)名字,,然后把默認(rèn)首頁(yè)的名字改為更改過(guò)的名字,。這樣,是瀏覽者能在輸入網(wǎng)之后便自動(dòng)訪問(wèn)該頁(yè),。而又不致讓對(duì)方知道該頁(yè)的名稱,。如果不這樣做,就會(huì)導(dǎo)致對(duì)方猜測(cè)出該頁(yè)的位置,。如:172.0.0.0/index.htm,。這樣,就可以通過(guò)在瀏覽器中提交:View-Source:Http://172.0.0.0/index.htm就可以看到該頁(yè)的源代碼了,。 在屏蔽掉了菜單欄和工具欄之后,,我們想,如果沒(méi)有了最上方的窗口條該多好呢,?下面我們要做的事情,,有前提,就是在上面所說(shuō)的在利用跳板頁(yè)面打開(kāi)一個(gè)無(wú)菜單欄的窗口之后,。我們要做什么呢,?就是讓我們顯示網(wǎng)站內(nèi)容的窗口只顯示內(nèi)容,(是啊,,網(wǎng)站不就是給別人瀏覽的嗎,?要瀏覽器和windows的那么多功能做什么呀……)只要內(nèi)容,其余一律去掉,。我們就可以通過(guò)一段Javascript來(lái)完成,。下面這段代碼就是用來(lái)定義無(wú)任何窗口特征的代碼: 〈script〉 function open1(url){ newwin=window.open(url,’newwindow’,’fullscreen=1’) newwin.resizeTo(800,600) newwin.moveTo(screen.width/0-800,screen.height/0-600) } 〈/script〉 其中,function open1(url)定義了超鏈接的寫法,。所以,,我們?cè)趯戞溄拥牡刂窌r(shí),應(yīng)該這樣寫:javascript:open1(url),。比如我要打開(kāi)一個(gè)無(wú)窗口特征的新浪首頁(yè)就應(yīng)該在文字或圖片的超鏈接里這樣寫:javascript:open1(‘http:www.sina.com.cn’),。當(dāng)然,括號(hào)內(nèi)也支持相對(duì)路徑,。最后寫出來(lái)的格式應(yīng)該是: 〈script〉 function open1(url){ newwin=window.open(url,’newwindow’,’fullscreen=1’) newwin.resizeTo(800,600) newwin.moveTo(screen.width/0-800,screen.height/0-600) } 〈/script〉 〈body oncontextmenu=self.event.returnValue=false onselectstart="return false"〉 〈td width="100%"〉〈a href="javascript:open1(’main.htm’),window.close()"〉〈img border="0" src="pic/blank1.gif" style="position: absolute; left: 556; top: 142" width="169" height="57"〉〈/a〉〈/td〉 〈/body〉 這樣,,我們就達(dá)到了打開(kāi)無(wú)窗口邊的網(wǎng)頁(yè)了。并且,,在這個(gè)網(wǎng)頁(yè)中,,會(huì)自動(dòng)加入滾動(dòng)條,這樣,,就不會(huì)像前面那樣看不到下面的內(nèi)容啦,。 最后我們要做的工作,就是把每一頁(yè),,或者你認(rèn)為重要的關(guān)鍵的頁(yè)面進(jìn)行加密,,就OK啦,。怎樣對(duì)網(wǎng)頁(yè)的源代碼進(jìn)行加密就不用我多說(shuō)了吧?網(wǎng)上到處都有,,可以用工具,也可以自己寫一個(gè)htm文件來(lái)轉(zhuǎn)換,。加密軟件,,我推薦“Batch HTML Encryptor”,去google找吧,。還有轉(zhuǎn)換加密網(wǎng)頁(yè)的代碼如下: 〈HTML〉〈HEAD〉〈TITLE〉網(wǎng)頁(yè)加密解密〈/TITLE〉 〈META http-equiv=Content-Type content="text/html; charset=gb2312"〉 〈META content="MSHTML 6.00.2600.0" name=GENERATOR〉〈!-- 大地軟件工作室--〉〈LINK href="style.css" rel=stylesheet〉 〈META content="Microsoft FrontPage 4.0" name=GENERATOR〉 〈/HEAD〉 〈BODY bgColor=#ffffff leftMargin=0 topMargin=0 onload=initStyleElements()〉 〈DIV style="LEFT: 139px; WIDTH: 106px; POSITION: absolute; TOP: 52px; HEIGHT: 36px"〉 〈TABLE cellSpacing=0 cellPadding=0 width=760 align=center border=0〉〈!--DWLayoutTable--〉 〈TBODY〉 〈TR〉 〈TD vAlign=top align=middle width=760 height=310〉 〈DIV align=center〉 〈H2〉 〈SCRIPT language=JavaScript〉 〈!-- var i=0; var ie=(document.all)?1:0; var ns=(document.layers)?1:0; function initStyleElements() /* Styles for Buttons Init */ { var c = document.pad; if (ie) { //c.text.style.backgroundColor="#DDDDDD"; c.compileIt.style.backgroundColor="#C0C0A8"; c.compileIt.style.cursor="hand"; c.select.style.backgroundColor="#C0C0A8"; c.select.style.cursor="hand"; c.view.style.backgroundColor="#C0C0A8"; c.view.style.cursor="hand"; c.retur.style.backgroundColor="#C0C0A8"; c.retur.style.cursor="hand"; c.clear.style.backgroundColor="#C0C0A8"; c.clear.style.cursor="hand"; } else return; } /* Buttons Enlightment of "Compilation" panel */ function LightOn(what) { if (ie) what.style.backgroundColor = ’#E0E0D0’; else return; } function FocusOn(what) { if (ie) what.style.backgroundColor = ’#EBEBEB’; else return; } function LightOut(what) { if (ie) what.style.backgroundColor = ’#C0C0A8’; else return; } function FocusOff(what) { if (ie) what.style.backgroundColor = ’#DDDDDD’; else return; } /* Buttons Enlightment of "Compilation" panel */ function generate() /* Generation of "Compilation" */ { code = document.pad.text.value; if (code) { document.pad.text.value=’Compiling...Please wait!’; setTimeout("compile()",1000); } else alert(’First enter something to compile and then press CompileIt’) } function compile() /* The "Compilation" */ { document.pad.text.value=’’; compilation=escape(code); document.pad.text.value="〈script〉\n〈!--\ndocument.write(unescape(\""+compilation+"\"));\n//--〉\n〈\/script〉"; i++; if (i=1) alert("Page compiled 1 time!"); else alert("Page compiled "+i+" times!"); } function selectCode() /* Selecting "Compilation" for Copying */ { if(document.pad.text.value.length〉0) { document.pad.text.focus(); document.pad.text.select(); } else alert(’Nothing for be selected!’) } function preview() /* Preview for the "Compilation" */ { if(document.pad.text.value.length〉0) { pr=window.open("","Preview","scrollbars=1,menubar=1,status=1,width=700,height=320,left=50,top=110"); pr.document.write(document.pad.text.value); } else alert(’Nothing for be previewed!’) } function uncompile() /* Decompiling a "Compilation" */ { if (document.pad.text.value.length〉0) { source=unescape(document.pad.text.value); document.pad.text.value=""+source+""; } else alert(’You need compiled code to uncompile it!’) } // --〉 〈/SCRIPT〉 〈BR〉〈B〉〈FONT color=#333333〉網(wǎng)頁(yè)HTML源代碼加密解密器〈/FONT〉〈/B〉〈/H2〉〈/DIV〉 〈TABLE cellSpacing=0 borderColorDark=#000000 cellPadding=10 width=750 align=center borderColorLight=#ffffff border=2〉 〈TBODY〉 〈TR〉 〈TD〉 〈DIV align=center〉〈BR〉將你的源代碼貼到編輯區(qū)域即可〈BR〉〈BR〉 〈TABLE cellSpacing=0 cellPadding=0 width="100%" border=0〉 〈TBODY〉 〈TR〉 〈TD width="100%"〉〈!-- Compilation Panel --〉 〈FORM name=pad method=post align="center"〉 〈DIV align=center〉〈TEXTAREA style="WIDTH: 95%; BACKGROUND-COLOR: #ebebeb" name=text rows=11 cols=58〉〈/TEXTAREA〉 〈BR〉〈BR〉〈BR〉〈INPUT onmouseover=LightOn(this) onclick=generate() onmouseout=LightOut(this) type=button value=加密 name=compileIt〉 〈INPUT onmouseover=LightOn(this) onclick=selectCode() onmouseout=LightOut(this) type=button value=全選 name=select〉 〈INPUT onmouseover=LightOn(this) onclick=preview() onmouseout=LightOut(this) type=button value=預(yù)覽 name=view〉 〈INPUT onmouseover=LightOn(this) onclick=uncompile() onmouseout=LightOut(this) type=button value=解密 name=retur〉 〈INPUT onmouseover=LightOn(this) onmouseout=LightOut(this) type=reset value=清除 name=clear〉 〈/DIV〉〈/FORM〉〈!-- Compilation Panel --〉〈/TD〉〈/TR〉〈/TBODY〉〈/TABLE〉〈/DIV〉〈/TD〉〈/TR〉〈/TBODY〉〈/TABLE〉 〈DIV align=center〉〈BR〉〈/DIV〉 〈DIV align=center〉〈/DIV〉 〈/TD〉〈/TR〉〈/TBODY〉〈/TABLE〉 〈/DIV〉 〈DIV〉〈/DIV〉〈/BODY〉〈/HTML〉 總結(jié)一下……按我的思路,,屏蔽網(wǎng)頁(yè)源代碼主要分為以下幾個(gè)步驟: 1. 做一個(gè)網(wǎng)頁(yè)跳板,彈出要保護(hù)的廣告條狀頁(yè)面,,并將自身關(guān)閉,,以避免泄露需保護(hù)網(wǎng)頁(yè)的地址。 2. 由于上述條件屏蔽了廣告條內(nèi)網(wǎng)頁(yè)的源代碼,,所以可以用這個(gè)網(wǎng)頁(yè)作為歡迎頁(yè),。 3. 在歡迎頁(yè)中,利用Javascript以超連接的形式來(lái)打開(kāi)無(wú)窗口邊的新窗口顯示網(wǎng)站內(nèi)容,。 4. 對(duì)每一個(gè)頁(yè)面或者對(duì)重要的關(guān)鍵的頁(yè)面進(jìn)行源代碼加密,,為源代碼加一把鎖。(有些人說(shuō)對(duì)源代碼進(jìn)行加密沒(méi)有用,,但是我覺(jué)得要使用另類點(diǎn)的加密方法就可以了,,比如軟件的加密方法就很普通。但是用我自己寫的htm文件加密的源代碼,,一般軟件是不能進(jìn)行解密的,。大家有興趣的話可以試試。) 5. 最后不得不提的就是windows網(wǎng)頁(yè)臨時(shí)文件夾了,,那里面會(huì)把源代碼紀(jì)錄的,。但是不用怕,加入一種代碼,,就可以使windows不下載網(wǎng)頁(yè)的源代碼,,直接瀏覽??梢匀フ艺?。 有些東西要注意的: 1. 在文中所說(shuō)的自動(dòng)關(guān)閉網(wǎng)頁(yè)的語(yǔ)句:window.close()有一個(gè)弊病。就是會(huì)在關(guān)閉窗口之前詢問(wèn)是否關(guān)閉窗口,,如果選擇否的話目的還是達(dá)不到,。 2. 以上一切都只對(duì)IE瀏覽器有效用,如果用別的瀏覽器來(lái)瀏覽,,就有可能出現(xiàn)屏蔽不成功的現(xiàn)象,。 3. 關(guān)于網(wǎng)頁(yè)源代碼屏蔽,,一直以來(lái)是可望而不可及的。我只是把思路寫下來(lái),,具體實(shí)現(xiàn),,還是要靠大家自己研究的啦。 |
|