12

データをサニタイズする Node.js プロジェクトと、サニタイズを処理して XSS を防ぐ JavaScript 用の OWASP ライブラリがあります。

私はこれらのライブラリのベンチマークを行ってきましたが、それらは非常に集中的であり、やり過ぎかもしれません。私のアプリケーションは動的 HTML (ユーザーによって送信されたもの、bbtags など、まったく必要ないもの) を必要としないので、次のようにしてみませんか?

  1. " <" および " >" 文字を無効にします。これらの文字を置き換えたり、何も置き換えたりせずに無効にします。ユーザーがこれらを送信した場合は、これらが無効になっていることを警告します (クライアント側とサーバー側の検証)。
  2. &=>&amp;
  3. "=>&quot;
  4. '=>&#x27;
  5. /=>/
  6. 送信された URL をエンコードする (GET パラメータなど)
  7. 私のアプリケーションは HTML5 PushState を使用し、バックエンドはフロントエンドから完全に分離されているため、DOM ベースの XSS はカバーされています。

前述のとおり、これで自分自身を守るには十分でしょうか。私のアプリケーションでは、ユーザーが送信した HTML は必要ないため、 タグ<>タグはまったく必要ありません。

すべてのフィードバックをありがとう、これは私が今使っているものです:

var pattern = /<(.*)>/;

function hasHtmlTags(string) {
    return pattern.test(string);
};

if (hasHtmlTags(userData)) {
    // Do something?
} else {
    // Create entity.
}

そのため、ユーザーは引き続き絵文字 :< などを使用でき、関数は < と > の組み合わせが見つかった場合にのみトリガーされます。したがって、高価な正規表現などは必要ありません。< と > の組み合わせを無効にするだけで問題ありません。

4

4 に答える 4

12

一般的なエンコード手順は次のとおりです。

var lt = /</g, 
    gt = />/g, 
    ap = /'/g, 
    ic = /"/g;
value = value.toString().replace(lt, "&lt;").replace(gt, "&gt;").replace(ap, "&#39;").replace(ic, "&#34;");

ユーザーがサーバーに何も送信しない場合、上記は必要ありません。ユーザーが送信し、ユーザー入力を使用している場合、上記は安全なはずです。「<」と「>」がグローバルにサニタイズされていて、括弧もサニタイズされている限り、問題ありません。

于 2012-10-09T12:02:42.743 に答える
6

encodeURIComponentデータをクライアントに送信する前に使用しないのはなぜですか?

var string="<script>...</script>";
string=encodeURIComponent(string); // %3Cscript%3E...%3C/script%3
于 2012-10-09T12:10:58.350 に答える