網頁屏蔽(左右鍵,代碼等)的非JS方法總結

來源:互聯網
上載者:User
js|網頁|右鍵

  很早就想寫一篇關於網頁原始碼屏蔽的文章。是因為經常編出些JS指令碼的之後,在沾沾自喜的同時,也在擔心原始碼會被人家看到,盜用我的指令碼。所以一直以來,我都在儘力維護我的網頁原始碼的安全。雖然目前還沒有找到完全安全的屏蔽方法(也就是說,這些方法在我想出來的同時,自己已經知道其弱點和破解方法了),但是,我這裡有很多屏蔽的思路,來總結一下。

  眾所周知,要保護一個頁面,最基礎的就是要屏蔽右鍵。而現在網頁上用得最多的是function click(),即下面這段代碼:

〈script〉
function click(){
if(event.button==2){
alert( '本網站歡迎您 !!');
}
}
document.onmousedown=click
〈/script〉


  但是這種屏蔽方法的破解方法也是眾所周知的。那就是連續單擊滑鼠左鍵和右鍵便又可以看到右鍵菜單了。但是,我見過一種很好的屏蔽右鍵的方法。它的原理和上面所說的不同。它並不是用JS來編寫的指令碼,而是利用定義網頁屬性來起到限制的作用。而且,在屏蔽中應該盡量的避開使用JS指令碼。因為只要瀏覽者把IE裡的javascript指令碼禁用了。那麼一切屏蔽都白費。

  那麼繼續說那種通過修改網頁屬性的屏蔽右鍵的方法。這種方法利用了HTML裡的〈body〉來作修改,它只有以下短短的一行代碼:

〈body oncontextmenu=self.event.returnValue=false〉


  這裡,定義了oncontextmenu。使得右鍵的值為false,起到了屏蔽右鍵的效果。現在,再試試看剛才的破解方法,已經不行了。左右鍵連擊已經不能再開啟右鍵菜單。不但是這個,再試試看其他的方法。無論你怎樣的亂點,右鍵都沒有用。因為在這個網頁裡,右鍵已經不存在了。對於一個不存在的功能鍵,你又能做什麼呢?

  但是,屏蔽了右鍵還不能解決問題。如果我要複製一段文字,或是一張圖片。那麼,把它選中後用ctrl+C 再用 ctrl+V不就可以複製粘貼了嘛。對了,接下來要講的,就是屏蔽左鍵(什嗎?屏蔽左鍵?那這個網頁不就差不多廢掉了?別急,沒說完呢,左鍵只有一項功能是很討厭的)的選定功能。

  那麼,如上所說,用JS來屏蔽是沒有用的,治標不治本的。那麼,我們就還用網頁的最基礎的語言:HTML來定義吧。還是老招數,定義〈body〉。這次用的參數是:onselectstart。就是左鍵選定的參數。代碼如下:

〈body onselectstart="return false"〉


  這樣,左鍵選定功能就給輕易屏蔽了。原理和上面的一樣。現在,再用你的左鍵選擇任意內容把,已經沒有用了。自然也不能ctrl + C,ctrl +V了。那麼,現在我們來把這兩部分合并起來。徹底控制左右鍵!:

〈body oncontextmenu=self.event.returnValue=false onselectstart="return false"〉


  現在,左右鍵的問題總算是解決了吧。

  好,現在我們來看另一個問題。大家都知道,在IE瀏覽器的功能表列裡的“查看”項裡。有一個“查看原始碼”選項。這麼一來,雖然我們屏蔽了右鍵裡的查看原始碼。但是,只要用功能表列裡的查看原始碼,還是可以看到原始碼的。這可怎麼辦呢?

  我最初的想法是用架構來避開原始碼的查看。也就是說,只要一個網頁是嵌在架構裡的,那麼在功能表列裡選擇查看原始碼查看到的只是框架頁的原始碼。一般格式如下:

〈html〉
〈head〉
〈meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312"〉
〈title〉本網站標題〈/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〉此網頁使用了架構,但您的瀏覽器不支援架構。〈/p〉

〈/body〉
〈/noframes〉
〈/frameset〉

〈/html〉


  這樣看起來對方是沒有直接看到你的原始碼了。但是,如果一個人要看你的原始碼,那他八成是能看懂的。如果懂一點HTML的話,都能看出這兩句是什麼意思:

〈frame name="header" scrolling="no" noresize target="main" src="top.htm"〉
〈frame name="main" src="main.htm" scrolling="auto" target="_self"〉


  這兩句的意思就是:在header(也就是網頁頂部)處引用相對路徑下的top.htm網頁檔案。而在main(也就是佔據網頁大部分頁面的位置)處引用相對路徑下的main.htm網頁檔案。就這兩點是關鍵的,其他就不作解釋了,大家也都懂的。而上面所講的利用架構來隱藏原始碼的方法就是將要顯示頁面放在main部分。而將header部分的大小設為0。但是這樣一來,利用功能表列裡的查看原始碼,還是能查看到框架頁的原始碼。只要看到這兩句,就知道我們前面用的手法了。也就是說,只要將框架頁的名字改為目標網頁,便可以用相同的方法直接看到目標網頁的原始碼了。如:框架頁:http://www.sina.com.cn/red.htm的原始碼如上,就可以改為Http://www.sina.com.cn/main.htm。這樣便可直接瀏覽被保護網頁,屏蔽原始碼的效果還是沒有達到。

  那麼,有些人就會想到,如果對方看不到框架頁的原始碼。又何談去直接開啟被保護網頁?對,這就是接下來我要講的。如果要一個頁面的功能表列內的查看原始碼失去效用。那最簡單的辦法就是去掉功能表列。而這一點是可以通過快顯視窗來實現的。之所以不選用超連結開啟無功能表列視窗是因為那樣會暴露目標地址,瀏覽者可以直接在瀏覽器中敲入地址,而繞過這個屏蔽的功能表列。要使用超連結開啟無功能表列視窗,就必須在一個已受到原始碼屏蔽保障的網頁中使用相關連結。

  那麼,我們就看看如何利用快顯視窗來去掉功能表列。其實,我們要做的,就是讓目標網頁在一個廣告條中開啟。這個代碼幾乎每個大型網站都會有的。代碼如下:

〈script〉
〈!--
window.open("red.htm", "red", "resizable=yes,width=500,height=300");
--〉
〈/script〉


  這裡,在window.open後的括弧裡的第一個參數就是快顯視窗所顯示的網頁的位置,這裡例子裡是先對位置下的red.htm網頁檔案。這時運行便會談出一個顯示有red.htm的無功能表列的視窗。好,我們的目的達到了。但是,這個視窗有一個缺陷,就是沒有捲軸。因為在談出視窗的語句:window.open裡並沒有關於捲軸的參數,(或是我不知道?歡迎高手來信指出),所以這裡開啟的網頁建議只做成網頁的導航頁。

  但是,用以上方法取消功能表列,必須有一個第二方的網頁來作彈出的工作。那麼,這個用來快顯視窗的網頁又成為了一個問題的所在。舉例來說:假設,我們用一個index.htm來作快顯視窗的工作。也就是開啟index.htm之後,會彈出red.htm的無功能表列視窗。前面我們也提到了,如果知道了一個網頁的地址後,無論這個網頁是否隱藏在無功能表列之下,你都能看到它的原始碼。那麼,不讓這個red.htm的地址暴露也就成瞭解決這個問題的關鍵。但是,只要這個index.htm被開啟,就可以看到原始碼。但是,不妨反過來想想,如果我們把index.htm給關起來呢?只要在瀏覽者沒有來得及查看index.htm之前將它關閉,就能保住它的原始碼了。那麼,在這個index.htm裡就有得做些文章了。

  那就是,添加關閉網頁的代碼。

  那麼,我們就可以用window.close來關閉視窗。代碼如下:

〈script〉
〈!--
window.open();
--〉
〈/script〉



  那麼,現在我們把兩部分代碼合并起來。現在,得到的效果就是——直接有一個無功能表列的視窗開啟了。因為電腦的處理速度很快,如果我們將這兩段代碼緊接著寫在一起,那麼我們就只能看到建立的視窗。代碼如下:

〈script〉
〈!--
window.open("red.htm", "red", "resizable=yes,width=500,height=300");
window.close();
--〉
〈/script〉


  而原來的視窗,已在我們無察覺的情況下關閉了。這樣,就別說查看該網頁的原始碼了。這裡,加入上面原始碼的網頁起了一個跳板的作用。但是,在這裡,我們要注意幾點。第一,用來做跳板的網頁不應該命名為index.htm。將它換一個名字,然後把預設首頁的名字改為更改過的名字。這樣,是瀏覽者能在輸入網之後便自動訪問該頁。而又不致讓對方知道該頁的名稱。如果不這樣做,就會導致對方猜測出該頁的位置。如:172.0.0.0/index.htm。這樣,就可以通過在瀏覽器中提交:View-Source:Http://172.0.0.0/index.htm就可以看到該頁的原始碼了。

  在屏蔽掉了功能表列和工具列之後,我們想,如果沒有了最上方的視窗條該多好呢?下面我們要做的事情,有前提,就是在上面所說的在利用跳板頁面開啟一個無功能表列的視窗之後。我們要做什麼呢?就是讓我們顯示網站內容的視窗只顯示內容,(是啊,網站不就是給別人瀏覽的嗎?要瀏覽器和windows的那麼多功能做什麼呀……)只要內容,其餘一律去掉。我們就可以通過一段Javascript來完成。下面這段代碼就是用來定義無任何視窗特徵的代碼:

〈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)定義了超連結的寫法。所以,我們在寫連結的地址時,應該這樣寫:javascript:open1(url)。比如我要開啟一個無視窗特徵的新浪首頁就應該在文字或圖片的超連結裡這樣寫:javascript:open1(‘http:www.sina.com.cn’)。當然,括弧內也支援相對路徑。最後寫出來的格式應該是:

〈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="http://www.webjx.com/htmldata/2006-08-28/pic/blank1.gif" style="position: absolute; left: 556; top: 142" width="169" height="57"〉〈/a〉〈/td〉
〈/body〉


  這樣,我們就達到了開啟無視窗邊的網頁了。並且,在這個網頁中,會自動加入捲軸,這樣,就不會像前面那樣看不到下面的內容啦。

  最後我們要做的工作,就是把每一頁,或者你認為重要的關鍵的頁面進行加密,就OK啦。怎樣對網頁的原始碼進行加密就不用我多說了吧?網上到處都有,可以用工具,也可以自己寫一個htm檔案來轉換。加密軟體,我推薦“Batch HTML Encryptor”,去google找吧。還有轉換加密網頁的代碼如下:

〈HTML〉〈HEAD〉〈TITLE〉網頁加密解密〈/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〉網頁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〉將你的原始碼貼到編輯地區即可〈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=預覽 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〉


  總結一下……按我的思路,屏蔽網頁原始碼主要分為以下幾個步驟:

  1. 做一個網頁跳板,彈出要保護的廣告條狀頁面,並將自身關閉,以避免泄露需保護網頁的地址。

  2. 由於上述條件屏蔽了廣告條內網頁的原始碼,所以可以用這個網頁作為歡迎頁面。

  3. 在歡迎頁面中,利用Javascript以超串連的形式來開啟無視窗邊的新視窗顯示網站內容。

  4. 對每一個頁面或者對重要的關鍵的頁面進行原始碼加密,為原始碼加一把鎖。(有些人說對原始碼進行加密沒有用,但是我覺得要使用另類點的加密方法就可以了,比如軟體的加密方法就很普通。但是用我自己寫的htm檔案加密的原始碼,一般軟體是不能進行解密的。大家有興趣的話可以試試。)

  5. 最後不得不提的就是windows網頁臨時檔案夾了,那裡面會把原始碼紀錄的。但是不用怕,加入一種代碼,就可以使windows不下載網頁的原始碼,直接瀏覽。可以去找找。

  有些東西要注意的:

  1. 在文中所說的自動關閉網頁的語句:window.close()有一個弊病。就是會在關閉視窗之前詢問是否關閉視窗,如果選擇否的話目的還是達不到。

  2. 以上一切都只對IE瀏覽器有效用,如果用別的瀏覽器來瀏覽,就有可能出現屏蔽不成功的現象。

  3. 關於網頁原始碼屏蔽,一直以來是可望而不可及的。我只是把思路寫下來,具體實現,還是要靠大家自己研究的啦。



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。