2012-09-03 109 views
1

我需要在我的網站上使用安全的html。Google caja - 阻止惡意代碼

雖然我讀了caja指南,但我不確定我是否理解了conecpt。

https://developers.google.com/caja/docs/gettingstarted/

我覺得是這樣的:

  • 用戶提交惡意內容到我的分貝
  • 我想呈現它。 Caja識別惡意代碼並阻止它。

但是,如何通過caja渲染它?他們沒有在他們的頁面上解釋這些,他們只是展示如何替換代碼。

<script type="text/javascript"> 
     document.getElementById('dynamicContent').innerHTML = 'Dynamic hello world'; 
</script> 

比方說,我們的文件應該是這樣的

<body> 
    <div class="input"> 
     <h3>User Input </h3> 
     <script> alert("I am really bad!"); </script> 
    </div> 

    <div class="input"> 
     <h3>User Input </h3> 
     <p> I am safe HTML!</p> 
    </div> 
</body> 

我怎麼會告訴卡哈來阻止腳本標籤?

+0

Caja是一套完成不同事情的工具。你想*阻止*所有第三方的JavaScript,或使*安全*運行第三方JavaScript?您鏈接的頁面是爲了保證安全。要阻止它,您需要HTML清理程序:http://code.google.com/p/google-caja/wiki/JsHtmlSanitizer –

回答

12

要使用:

<script src="http://caja.appspot.com/html-css-sanitizer-minified.js"></script> 
<script> 
    var sanitized = html_sanitize(untrustedCode, 
    /* optional */ function(url) { return url /* rewrite urls if needed */ }, 
    /* optional */ function(id) { return id; /* rewrite ids, names and classes if needed */ }) 
</script> 

如果您不希望允許消毒CSS樣式,使用http://caja.appspot.com/html-sanitizer-minified.js來代替。

0

在我看來,AntiSamy是一個更好的方法。

https://www.owasp.org/index.php/Category:OWASP_AntiSamy_Project#What_is_it.3F

,如果你想擁有隻是消毒HTML(即無腳本執行的話),你並不需要所有的卡哈,就在HTML的消毒劑實在是簡單

+1

爲什麼您覺得AntiSamy比html_sanitize更好? –

+0

因爲這樣我可以防止在我的數據庫中有惡意代碼。如果我是正確的caja在渲染時過濾代碼?不是100%確定這一點。 +我不需要額外的.js文件。只是我的意見,沒有太多的知識是誠實的。 AntiSamy只爲我工作。 –

+1

好的,所以對於你的問題它可能會更好。正如我所說,Caja是一套工具。 html_sanitizer是一個客戶端庫,用於獲取JavaScript字符串str並使其安全地說'div.innerHTML = str'。 Caja還提供了一個庫'caja.js',它創建了一個「更好的iframe」,您可以在其中放置用戶代碼並運行它,但無法訪問Cookie等內容,並且無法重定向頁面等等 –