2015-11-08 51 views
0

我正在使用鬍子來轉義用戶數據,然後通過javascript在html中顯示它。如何在表單中安全顯示用戶的服務器端數據?

但是,當我使用它在表單輸入字段中顯示數據時(通過AJAX從服務器檢索其用戶數據之前填充表單),它將顯示實體。

Shaun's place 

顯示爲

Shaun's place 

我會用在鬍鬚三個支架伎倆,但並不意味着數據不會被轉義,因此使頁面脆弱?

  • 存儲在MySQL中的數據是用戶配置文件。

  • 當我從服務器取回數據時,通過以下鬍鬚代碼運行數據,然後將其保存在本地對象中 - 想法是我不必每次都通過多次鬍子來運行它我沒有在網站上的各個地方展示它。所以這裏是一個鍵,位置,正在處理的例子:

    var t =「{{}}」,o = {x:serverObjectReturn.location},x = Mustache.render(t,o) ; localUserDataObject.location = x;

  • 不是100%確定你的意思是由內容類型 - 我使用AJAX調用,並將數據發送回JSON。 AJAX函數dataType是「json」。讓我知道如果你需要別的東西,我會編輯

  • 我更新表單輸入字段,以便他們有編輯,像這樣的配置文件數據加載準備:

    $(「#位置」)VAL (userData.location); 。

當我拿到這就是:

Shaun's place 

...而:

$( 「#testerDivLocation」)HTML(userData.location);

顯示

Shaun's place 

謝謝。

+3

你有什麼數據存儲在服務器上?你怎麼用鬍子改變它?你將哪些內容類型發回給客戶?你如何閱讀客戶端JavaScript的數據?你如何使用它來填充表單? 「 – Quentin

+0

」存儲在MySQL中的數據是用戶配置文件。「 - 好極了。它是什麼樣子的?我的其他4個問題呢? – Quentin

+0

我在那裏找到伴侶 - 一次添加一個,以確保我能夠正確地完成任務。將全部更新約15 – Shaun

回答

1

這裏是關於這一議題的文件:

所有變量都HTML默認情況下逃脫。如果您想返回 未轉義的HTML,請使用三重鬍鬚:{{{name}}}。

所以你是對的,它可能會讓你面對漏洞(特別是XSS)。這對於您已知的數據可以安全地在HTML中呈現是很有用的,這可能是因爲您已在其他地方轉義和/或清除了數據。

由於input字段值有點不同,因爲它們比純HTML更原始,所以您可能需要在服務器端或在調用render之前的JavaScript中執行一些自定義轉義。這意味着搞清楚一套把輸入字段處於危險之中所有可能的字符(行情是明顯的,但對於尖括號<>?)

另一種選擇是留在HTML土地的表單字段值空白並使用JavaScript通過DOM設置它們的值。因爲您不再試圖將原始數據嵌入到HTML代碼中,所以這對我來說更安全。

var t="<input type='text' name='firstname' value=''>"; 
var x=Mustache.render(t); 
$('input', x).val(serverObjectReturn.firstname); 

(假定jQuery是加載的$呼叫)。

+0

謝謝布蘭登。那不是我已經做的事情嗎?雖然我不是用鬍鬚創建實際的表單,但我只是將Mustard數據保存在本地變量中,然後填充表單。另外,你能解釋一下這種方式是否更安全,因爲如果惡意腳本位於serverObjectReturn.firstname中,它仍然不能運行。 – Shaun

+0

事實證明,你不需要使用val()來設置你想要設置的任何東西,就像你必須使用html() - val()意味着「將DOM元素的值設置爲這個字符串」。它直接告訴瀏覽器使用該字符串作爲值,所以不涉及HTML解析,因此不需要轉移傳遞給它的東西。 – Shaun

+0

準確地說......解析HTML的缺乏是安全的。 – Brandon

相關問題