2012-07-01 79 views
4

我正在使用Node.js和Underscore.js。我無法確定是否在服務器端或客戶端轉義JSON數據。對於下劃線不會自動轉義插值,其語法爲<%= someValue %>,但是<%- someValue %>與EJS形成鮮明對比,可能會導致混淆。 GitHub上有一個issue,還有一個自動轉義版本的commit。但是這個問題下面評論說:Node.js - 何時對JSON數據,服務器端或客戶端執行HTML轉義?

我是一般的哲學是逃避應比模板語言來完成更接近 數據

因此,任何建議,什麼時候做HTML轉義到AJAX數據更好?這是我一直在使用服務器端的輔助功能:

var htmlEscape = function(html){ 
    return String(html) 
    .replace(/&(?!\w+;)/g, '&amp;') 
    .replace(/</g, '&lt;') 
    .replace(/>/g, '&gt;') 
    .replace(/"/g, '&quot;'); 
}; 
var xss = function(obj) { 
    if (obj instanceof Array) { 
     for (var i = 0; i < obj.length; i++) { 
      obj[i] = xss(obj[i]); 
     } 
    } else { 
     for(var key in obj) { 
      // key != '_id' for mongoose doc 
      if(obj[key] instanceof Object && !(obj[key] instanceof String) 
       && !(obj[key] instanceof Function) && key != '_id') { 
       obj[key] = xss(obj[key]); 
      } else if (obj[key] instanceof String || typeof(obj[key]) == "string") { 
       obj[key] = htmlEscape(obj[key]); 
      } else { 
       obj[key] = obj[key]; 
      } 
     } 
    } 
    return obj; 
}; 

然後調用它時,返回一個JSON:因爲任何人都可以亂

res.json(xss(someData)); 

回答

1

它始終是更好地在服務器上執行消毒/越獄操作與您的客戶端代碼並以任何他們想要的方式發送數據。

有一個很棒的node.js模塊,node-validator,它有一個xss()函數以及其他一些用於驗證/清理數據的函數。

+0

只要注意到XSS消毒劑是在節點驗證[鏈接](https://github.com/chriso/validator.js) ** **棄用的版本3棄用的 第3版庫不贊成使用某些功能 ** XSS清潔劑:原因如下。請使用Google Caja ** 只需添加此評論以供將來參考,請完全同意答案 – gumaflux

+0

@gumaflux您的意思是https://www.npmjs.org/package/sanitizer? – laggingreflex

相關問題