IT Share you

Node.js / 서버 측 자바 스크립트에서 XSS 방지

shareyou 2020. 11. 17. 21:25
반응형

Node.js / 서버 측 자바 스크립트에서 XSS 방지


node.js 앱에서 XSS 공격을 방지하는 방법에 대해 아십니까? hrefs, onclick 속성 등에서 javascript 제거를 처리하는 모든 libs. 게시 된 데이터에서?

나는 모든 것에 대한 정규식을 작성하고 싶지 않습니다. :)

어떤 제안?


클라이언트 측에서 HTML Sanitize / Rewrite HTML에 대한 답변 중 하나는 Google Caja에서 JS의 화이트리스트 기반 HTML 새니 타이 저를 차용 할 것을 제안합니다. 브라우저의 DOM.

업데이트 : 또한 Caja 새니 타이 저는 완전하고 전문적인 보안 검토를 받았으며 정규식은 보안을 훼손하는 방식으로 오타가 매우 쉬운 것으로 알려져 있습니다.

2017-09-24 업데이트 : 이제 DOMPurify 도 있습니다 . 아직 사용하지 않았지만 내가 찾는 모든 포인트를 충족하거나 초과하는 것 같습니다.

  • 가능하면 런타임 환경에서 제공하는 기능에 의존합니다. (성능과 가능한 한 잘 테스트되고 성숙한 구현에 의존하여 보안을 최대화하는 데 중요합니다.)

    • Node.JS 의 경우 브라우저의 DOM 또는 jsdom 에 의존합니다.
  • 자바 스크립트 제거를 보장하면서 가능한 한 적게 제거하도록 설계된 기본 구성입니다.

    • HTML, MathML 및 SVG 지원
    • toStaticHTMLIE8 및 IE9에서 구성 할 수없는 Microsoft의 독점 소유로 돌아갑니다 .
  • 고도로 구성 가능하므로 WYSIWYG 또는 Markdown 주석 필드와 같은 임의의 HTML을 포함 할 수있는 입력에 대한 제한을 적용하는 데 적합합니다. (사실, 여기 더미의 꼭대기입니다)

    • 일반적인 태그 / 속성 화이트리스트 / 블랙리스트 및 URL 정규식 화이트리스트를 지원합니다.
    • 특정 일반 유형의 HTML 템플릿 메타 문자를 추가로 삭제하는 특수 옵션이 있습니다.
  • 그들은 호환성과 신뢰성에 대해 진지합니다.

    • 16 개의 다른 브라우저와 Node.JS의 세 가지 주요 버전에서 실행되는 자동화 된 테스트.
    • 개발자와 CI 호스트가 모두 동일한 페이지에 있도록하기 위해 잠금 파일이 게시됩니다.

Caja HTML Sanitizer를 번들로 제공하는 모듈을 만들었습니다.

npm install sanitizer

http://github.com/theSmaw/Caja-HTML-Sanitizer

https://www.npmjs.com/package/sanitizer

어떤 피드백이라도 감사합니다.


모든 일반적인 기술은 node.js 출력에도 적용됩니다. 즉, 다음을 의미합니다.

  • 블랙리스트는 작동하지 않습니다.
  • HTML 출력을 보호하기 위해 입력을 필터링해서는 안됩니다. 작동하지 않거나 불필요하게 데이터를 변형하여 작동합니다.
  • HTML 출력에서 ​​텍스트를 HTML로 이스케이프해야합니다.

node.js에 이것에 대한 내장 기능이 있는지 확실하지 않지만 다음과 같은 작업을 수행해야합니다.

function htmlEscape(text) {
   return text.replace(/&/g, '&').
     replace(/</g, '&lt;').  // it's not neccessary to escape >
     replace(/"/g, '&quot;').
     replace(/'/g, '&#039;');
}

최근 chriso의 노드 유효성 검사기발견 했습니다 .

get('/', function (req, res) {

  //Sanitize user input
  req.sanitize('textarea').xss(); // No longer supported
  req.sanitize('foo').toBoolean();

});

XSS 기능 지원 중단

XSS 기능은 더 이상이 라이브러리에서 사용할 수 없습니다.

https://github.com/chriso/validator.js#deprecations


ESAPI 도 볼 수 있습니다 . 라이브러리자바 스크립트 버전이 있습니다 . 꽤 튼튼합니다.


In newer versions of validator module you can use the following script to prevent XSS attack:

  var validator = require('validator');

  var escaped_string = validator.escape(someString);

Try out the npm module strip-js. It performs the following actions:

  • Sanitizes HTML
  • Removes script tags
  • Removes attributes such as "onclick", "onerror", etc. which contain JavaScript code
  • Removes "href" attributes which contain JavaScript code

https://www.npmjs.com/package/strip-js


You should try library npm "insane". https://github.com/bevacqua/insane

I try in production, it works well. Size is very small (around ~3kb gzipped).

  • Sanitize html
  • Remove all attributes or tags who evaluate js
  • You can allow attributes or tags that you don't want sanitize

The documentation is very easy to read and understand. https://github.com/bevacqua/insane

참고URL : https://stackoverflow.com/questions/3705356/preventing-xss-in-node-js-server-side-javascript

반응형