Node.js / 서버 측 자바 스크립트에서 XSS 방지
node.js 앱에서 XSS 공격을 방지하는 방법에 대해 아십니까? hrefs, onclick 속성 등에서 javascript 제거를 처리하는 모든 libs. 게시 된 데이터에서?
나는 모든 것에 대한 정규식을 작성하고 싶지 않습니다. :)
어떤 제안?
클라이언트 측에서 HTML Sanitize / Rewrite HTML에 대한 답변 중 하나는 Google Caja에서 JS의 화이트리스트 기반 HTML 새니 타이 저를 차용 할 것을 제안합니다. 브라우저의 DOM.
업데이트 : 또한 Caja 새니 타이 저는 완전하고 전문적인 보안 검토를 받았으며 정규식은 보안을 훼손하는 방식으로 오타가 매우 쉬운 것으로 알려져 있습니다.
2017-09-24 업데이트 : 이제 DOMPurify 도 있습니다 . 아직 사용하지 않았지만 내가 찾는 모든 포인트를 충족하거나 초과하는 것 같습니다.
가능하면 런타임 환경에서 제공하는 기능에 의존합니다. (성능과 가능한 한 잘 테스트되고 성숙한 구현에 의존하여 보안을 최대화하는 데 중요합니다.)
자바 스크립트 제거를 보장하면서 가능한 한 적게 제거하도록 설계된 기본 구성입니다.
- HTML, MathML 및 SVG 지원
toStaticHTML
IE8 및 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, '<'). // it's not neccessary to escape >
replace(/"/g, '"').
replace(/'/g, ''');
}
최근 에 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
'IT Share you' 카테고리의 다른 글
저장소의 어디에서나 ipython 노트북 체크 포인트를 무시하는 방법 (0) | 2020.11.17 |
---|---|
World Wide Web의 가장 큰 사이트는 어떤 데이터베이스에서 실행됩니까? (0) | 2020.11.17 |
현재 날짜를 열의 기본값으로 사용 (0) | 2020.11.17 |
자바의 메모리 스트림 (0) | 2020.11.17 |
멀티 캐스트 (UDP) 소켓을 바인딩한다는 것은 무엇을 의미합니까? (0) | 2020.11.17 |