2012-07-01 1 views
4

Node.js와 Underscore.js를 사용하고 있습니다. 서버 측 또는 클라이언트 측에서 JSON 데이터를 이스케이프할지 여부를 결정할 수 없습니다. 밑줄 문자는 <%= someValue %> 구문을 사용하지만 보간 값은 <%- someValue %>으로 자동 이스케이프 처리하지 않으므로 EJS와는 달리 혼동을 일으킬 수 있습니다. GitHub에는 issue이 있고 자동 탈출 버전은 commit입니다. 그러나 문제 아래에 코멘트 말했다 :Node.js - JSON 데이터, 서버 또는 클라이언트 측에 HTML 이스케이프를 수행 할 때?

내가 탈출하는 할 때,

그래서 템플릿 언어보다 어떤 제안을 가까이 데이터를 수행해야하는 일반적인 철학 해요 AJAX 데이터에 대한 HTML 이스케이프가 더 좋습니다? 누구나 할 수있는 혼란 때문에

res.json(xss(someData)); 

답변

1

서버에 위생/탈출 작업을 수행하는 것이 더 낫다하십시오 JSON을 반환 할 때마다

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; 
}; 

그런 다음 호출 : 저는 여기에 사용 된 서버 측 도우미 함수입니다 클라이언트 쪽 코드를 사용하여 원하는 방식으로 데이터를 보내십시오.

위대한 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