72

node.jsアプリに対するXSS攻撃を防ぐにはどうすればよいでしょうか?hrefs、onclick属性などのjavascriptの削除を処理するライブラリ。POSTされたデータから?

私はそのすべての正規表現を書く必要はありません:)

助言がありますか?

4

9 に答える 9

56

CajaHTMLSanitizerをバンドルするモジュールを作成しました

npm install sanitizer

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

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

フィードバックをいただければ幸いです。

于 2010-10-29T16:29:05.893 に答える
24

クライアント側でのHTMLのサニタイズ/リライトに対する回答の1つは、JSのホワイトリストベースのHTMLサニタイザーをGoogle Cajaから借りることを提案しています。これは、クイックスクロールスルーからわかる限り、HTMLSAXパーサーに依存せずに実装します。ブラウザのDOM。

更新:また、正規表現はセキュリティを損なう方法でタイプミスするのが非常に簡単であることが知られている一方で、Cajaサニタイザーは明らかに完全な専門的なセキュリティレビューを受けていることを覚えておいてください。

更新2017-09-24:DOMPurifyあります。まだ使用していませんが、探しているすべてのポイントを満たしているか、超えているようです。

  • 可能な限り、ランタイム環境によって提供される機能に依存します。(パフォーマンスと、十分にテストされた成熟した実装に可能な限り依存することでセキュリティを最大化するために重要です。)

    • Node.JSについては、ブラウザーのDOMまたはjsdomのいずれかに依存します。
  • javascriptの削除を保証しながら、ストリップをできるだけ少なくするように設計されたデフォルト構成。

    • HTML、MathML、およびSVGをサポートします
    • toStaticHTMLIE8およびIE9では構成不可能なMicrosoft独自のフォールバック。
  • 高度に構成可能であるため、WYSIWYGやMarkdownコメントフィールドなど、任意のHTMLを含む可能性のある入力に制限を適用するのに適しています。(実際、ここは山の頂上です)

    • 通常のタグ/属性のホワイトリスト/ブラックリストとURL正規表現のホワイトリストをサポートします
    • 特定の一般的なタイプのHTMLテンプレートメタ文字をさらにサニタイズするための特別なオプションがあります。
  • 彼らは互換性と信頼性に真剣に取り組んでいます

    • 16の異なるブラウザーと3つの異なるメジャーバージョンのNode.JSで実行される自動テスト。
    • 開発者とCIホストがすべて同じページにいることを確認するために、ロックファイルが公開されます。
于 2010-09-14T03:15:22.337 に答える
20

通常のテクニックはすべて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;');
}
于 2010-12-11T23:24:17.143 に答える
15

私は最近、 chrisoによってnode-validatorを発見しました。

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

于 2010-12-23T22:23:14.967 に答える
5

ESAPIもご覧いただけます。ライブラリのjavascriptバージョンがあります。かなり頑丈です。

于 2010-09-15T23:51:17.210 に答える
4

新しいバージョンのvalidatorモジュールでは、次のスクリプトを使用してXSS攻撃を防ぐことができます。

  var validator = require('validator');

  var escaped_string = validator.escape(someString);
于 2014-01-31T10:28:46.417 に答える
1

npmモジュールを試してみてくださいstrip-js。次のアクションを実行します。

  • HTMLをサニタイズします
  • スクリプトタグを削除します
  • JavaScriptコードを含む「onclick」、「onerror」などの属性を削除します
  • JavaScriptコードを含む「href」属性を削除します

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

于 2016-10-12T15:31:56.957 に答える
0

ライブラリnpm「非常識」を試してみてください。 https://github.com/bevacqua/insane

私は本番環境で試してみましたが、うまくいきました。サイズは非常に小さいです(約3kb gzip圧縮)。

  • HTMLをサニタイズする
  • jsを評価するすべての属性またはタグを削除します
  • サニタイズしたくない属性やタグを許可することができます

ドキュメントは非常に読みやすく、理解しやすいものです。 https://github.com/bevacqua/insane

于 2018-12-31T11:05:14.527 に答える
0

アップデート2021-04-16:xssは、XSS攻撃を防ぐために、ユーザーからの入力をフィルタリングするために使用されるモジュールです。

ホワイトリストで指定された構成で、信頼できないHTMLを(XSSを防ぐために)サニタイズします。

https://www.npmjs.com/package/xss
プロジェクトホームページにアクセスします: http : //jsxss.com

于 2021-04-16T05:48:13.537 に答える