Node.jsアプリでXSS攻撃を防ぐ方法はありますか? href、onclick属性などのjavascriptの削除を処理するライブラリ。 POSTされたデータから?
私はそのすべてのために正規表現を書く必要はありません:)
助言がありますか?
クライアント側のHTMLのサニタイズ/リライト に対する回答の1つは、Google CajaからJSのホワイトリストベースのHTMLサニタイザーを借用することを提案します。ブラウザのDOMに依存しないHTML SAXパーサー。
更新:また、Cajaサニタイザーには完全かつ専門的なセキュリティレビューが与えられていることを忘れないでください。正規表現はタイプミスが非常に簡単であることが知られています。セキュリティを損なう方法。
2017-09-24の更新:現在、 DOMPurify もあります。まだ使用していませんが、探しているすべてのポイントを満たすか超えているようです:
可能な限り、ランタイム環境によって提供される機能に依存します。 (パフォーマンスと、十分にテストされ成熟した実装に可能な限り依存することでセキュリティを最大化するために重要です。)
Javascriptの削除を保証しながら、できる限りストリップしないように設計されたデフォルト構成。
toStaticHTML
にフォールバックします。高度な構成が可能で、WYSIWYGやMarkdownコメントフィールドなど、任意のHTMLを含むことができる入力に制限を適用するのに適しています。 (実際、ここの山の一番上です)
彼らは互換性と信頼性に真剣です
Caja HTML Sanitizerをバンドルするモジュールを作成しました
npm install sanitizer
http://github.com/theSmaw/Caja-HTML-Sanitizer
https://www.npmjs.com/package/sanitizer
フィードバックをお願いします。
通常のテクニックはすべてnode.js出力にも適用されます。つまり、次のことを意味します。
Node.jsにこのためのビルトインが付属しているかどうかはわかりませんが、そのようなものが仕事をするはずです:
function htmlEscape(text) {
return text.replace(/&/g, '&').
replace(/</g, '<'). // it's not neccessary to escape >
replace(/"/g, '"').
replace(/'/g, ''');
}
私は最近、 chriso によって node-validator を発見しました。
get('/', function (req, res) {
//Sanitize user input
req.sanitize('textarea').xss(); // No longer supported
req.sanitize('foo').toBoolean();
});
XSS関数は、このライブラリでは使用できなくなりました。
[〜#〜] esapi [〜#〜] もご覧ください。 ライブラリのjavascriptバージョン があります。かなり頑丈です。
validator
モジュールの新しいバージョンでは、次のスクリプトを使用してXSS攻撃を防ぐことができます。
var validator = require('validator');
var escaped_string = validator.escape(someString);
Npmモジュールを試してくださいstrip-js
。次のアクションを実行します。
ライブラリnpm "insane"を試してください。 https://github.com/bevacqua/insane
私は本番で試してみましたが、うまくいきます。サイズは非常に小さい(gzip圧縮で約3 kb)。
ドキュメントは非常に読みやすく、理解しやすいです。 https://github.com/bevacqua/insane