在每個人都告訴我不應該進行客戶端清理(我確實打算在客戶端執行它,但它也可以在SSJS中工作)之前,讓我澄清了我想要做的事情。基於JavaScript的X/HTML和CSS消毒
我想要的東西,類似於Google Caja或HTMLPurifier,但對於JavaScript:基於白名單的安全方法,處理HTML和CSS(當然還沒有插入到DOM中,這將不安全,但首先獲得字符串形式),然後有選擇地過濾出不安全的標籤或屬性,忽略它們或將它們選擇性地包含爲轉義文本,或者以其他方式將它們報告給應用程序進行進一步處理,理想情況下在上下文中。如果它可以將任何JavaScript減少到一個安全的子集,就像在Google Caja中一樣,但是我知道這將會提出很多問題。我的用例訪問通過JSONP(維基處理前的Mediawiki維基數據,從而允許原始但不可信的XML/HTML輸入)獲得的不可信的XML/XHTML數據,並允許用戶對該數據進行查詢和轉換( XQuery,jQuery,XSLT等),利用HTML5允許脫機使用,IndexedDB存儲等,然後可以允許在用戶查看輸入源的同一頁面上預覽結果並構建或導入他們的查詢。
用戶可以生成他們想要的任何輸出,所以我不會對他們正在做的事情進行淨化 - 如果他們想在頁面中注入JavaScript,那麼所有的權力。但我希望保護那些想要有信心的用戶,他們可以添加能夠安全地從不受信任的輸入中複製目標元素的代碼,同時不允許他們複製不安全的輸入。
這應該是可行的,但我想知道是否有任何庫已經這樣做。
如果我卡住自己實現這一點(儘管我對這兩種情況都很好奇),我想證明是否使用innerHTML
或DOM創建/附加BEFORE插入到文檔中是安全的辦法。例如,如果我第一次運行DOMParser
或者使用瀏覽器HTML解析通過使用innerHTML
將原始HTML附加到非插入的div,可以意外觸發事件嗎?我相信它應該是安全的,但不確定在插入之前DOM操作事件是否會以某種方式發生,這可能會被利用。
當然,構建好的DOM需要在該點之後進行消毒,但是我只想驗證我可以安全地構建DOM對象本身以便於遍歷,然後擔心會過濾掉不需要的元素,屬性和屬性值。
謝謝!
謝謝...此刻太忙了仔細觀察並驗證它是否仍然可以讓我將安全的HTML放入頁面,而不是轉義 - 因爲我的目的是允許重新整理查詢結果的HTML預覽,但似乎可能有所幫助。如果不是這樣,我真的認爲JavaScript需要這樣一個庫。我不想做任何不必要的往返行程,因爲這是針對離線應用的。謝謝! – 2011-04-14 18:35:32