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, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"');
};
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));
只要注意到XSS消毒劑是在節點驗證[鏈接](https://github.com/chriso/validator.js) ** **棄用的版本3棄用的 第3版庫不贊成使用某些功能 ** XSS清潔劑:原因如下。請使用Google Caja ** 只需添加此評論以供將來參考,請完全同意答案 – gumaflux
@gumaflux您的意思是https://www.npmjs.org/package/sanitizer? – laggingreflex