禁用頁面部分JavaScript方法

來源:互聯網
上載者:User

本文討論的方法本人並沒有在實際項目中應用過,因為我還沒有遇到有這樣需要的項目,但實驗發現可行。

一、我的想法來源

JavaScipt是好東西,它的出現讓網頁頁面表現形式更活潑,當然好處絕不僅僅就這些,而近些年來紅紅火火的AJAX應用更讓人開始重視JavaScipt小語言(好些程式牛人不把它看作語言,最多是指令碼稱號,甚至看不起搞指令碼的人)的應用。現在好些部落格官網開放指令碼許可權,允許使用者自訂指令碼來豐富自己的空間,特別像一些技術類專業部落格,提供了相當寬鬆的開發環境。但是我們也發現好些部落格會對某些指令碼方法作限制。注意,我這裡說的是部分限制,如果是全部限制那是很簡單的事,直接把<script>指令碼塊過濾掉就行了,但是部分限制又是如何做到的呢?

因為我在之前的項目中沒有遇到這樣的問題,所以也沒有作過多的深入研究,一開始只是憑感覺想到用“替換”方法。很顯然這樣的方法行不通,因為可能會出錯。比如我要禁用alert方法,現有下面那段代碼:

window.alert('Some message');

現在要讓上面那段代碼失效,只要讓alert變一下就行了,比如把它全部改成大寫ALERT,這樣又肯定會報指令碼錯誤的,但還是可以用try{}catch{}把ALERT包含起來,但這對禁用語包的識別又是一大難題,而且還會有這樣的錯誤:把document.write('alert some message');中的alert也替換了。

後來我想到了方法重寫,重寫要禁用的方法,並讓它什麼也不做,結果證明真的可行,但並不知道是不是一個科學的方法,我拿出來與大家共同討論一下。

二、具體實現

先看下面的代碼,實現了對“alert”,“write”兩個方法的禁用:

window.alert=function(){}
document.write=function(){}

window.alert('Alert some message');
document.write('Write some message');

看起來真的很簡單,在實際應用的時候,把前面兩行單獨抽出來存在一個外部JS檔案中,並在需要過濾JavaScript方法的頁面先載入這個JS檔案(也可以在使用者編輯內容塊的前一行載入這個指令碼,這樣之前的HTML塊中我們管理員或網頁製作者還是可以用將要被禁用的方法),這樣之後調用被禁用的方法是不起作用的了。

注意:最後提醒一下,還要禁用部分DOM操作方法,比如remove()方法,因為使用者可以用DOM的操作方法移除你一開始載入的那個JS檔案。

相關文章

聯繫我們

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

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

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.