2013-12-22 9 views
4

我不熟悉JavaScript什麼是「逃逸」與「轉義的」輸出

學習模板Node.js的模板引擎,它已經「逃」 &「轉義的」輸出

實際上是什麼?「轉義「&」轉義「輸出?

難道像「包含一次」&「包含」?

(谷歌提供有關這個沒有結果)

+1

[偉大的逃避現實(或:你需要知道如何處理文本中的文本)](http://kunststube.net/escapism/) – deceze

回答

10

轉義和轉義是防止Cross Site Scripting(XSS)攻擊是有用的。這是常見的網絡攻擊之一,因爲如果網站設計得不是很精心的話,創建攻擊媒介將會很容易。它的排名是number 3 in the OWASP's Top 10 vulnerabilities of 2013

的主要意圖是,NOT讓瀏覽器執行或解釋在比預期不同的方式HTTP響應。

例如,假設您有一個網頁接受用戶輸入他的地址,並且您希望用戶在下一頁中確認它。因此,您將獲取用戶輸入的地址並將其顯示在下一頁中。如果用戶輸入一個有效的地址,這不會是一個問題。如果用戶輸入這樣的事情

<script> 
    alert("Welcome"); 
</script> 

你的下一個頁面會自動產生一個警告框說:Welcome。現在,考慮這種情況。您正在編寫一個博客應用程序,並且用戶在提供的文本框中輸入上面看到的腳本。您將存儲在數據庫中,並且任何想看您的博客的人都將看到該警報框。最糟糕的是,如果攻擊者將這種情況置於無限循環中,那麼訪問該博客的人將根本無法閱讀該內容。

這只是基本的攻擊之一,如果你不逃避文本,這是可能的。

因此,通常,輸入的文本用戶將被轉義並存儲在數據庫中。例如,上面看到的攻擊向量(script標籤的東西)會變成這個樣子,以後HTML escaping

&lt;script&gt;<br/>  alert(&quot;Welcome&quot;);<br/>&lt;/script&gt; 

現在,瀏覽器不會認爲這是一個腳本元素,但一個HTML元素,所以它會顯示爲

<script> 
    alert("Welcome"); 
</script> 

而不是執行它。

0

Escape:該函數對特殊字符進行編碼,但是:* @ - _ +。/http://www.w3schools.com/jsref/jsref_escape.asp

Unescape:unescape()函數對已編碼的字符串進行解碼。 http://www.w3schools.com/jsref/jsref_unescape.asp

+0

['escape'](https:// developer。 mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/escape)和['unescape'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/unescape)已棄用,不應使用。比起W3School(例如[MDN](https://developer.mozilla.org/en-US/)),有更好的函數('encodeURI','encodeURIComponent',...)和更好的引用。 –